可能我说的并不准确,比如我在用户注册的时候,需要记录用户注册的IP地址或者浏览器信息,这些信息是来源于请求的META中,我现在的做法是这样的:
在UserProfileViewSet中重写create方法,然后把request.META['REMOTE_ADDR']插入serializer的validated_data中,然后再执行perform_create(serializer)方法,现在可以实现将ip地址插入到数据库对映字段中,可是我自己感觉这种实现很奇怪,因为这个IP地址无法经过serializer校验的那一层。请问老师如何做?多谢
我现在的代码差不多是这样的:
class UserProfileViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
.......
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.validated_data["add_ip"] = request.META['REMOTE_ADDR']
user = self.perform_create(serializer)
def perform_create(self, serializer):
return serializer.save()
......
请老师指点。我这种实现很奇怪,正常的这种来源于request中的信息应该在什么地方插入数据库,同时能享受到serializer的校验功能。
Django REST framework课程视频,RESTFul API前后端分离开发
了解课程