请问老师如何将请求中的一些信息写入serializer?
来源:7-12 user serializer和validator验证-2
天真男
2017-10-05
可能我说的并不准确,比如我在用户注册的时候,需要记录用户注册的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的校验功能。
1回答
-
bobby
2017-10-07
这个可以重写create方法直接把这两个值放到request.data中然后传递给serializer进行序列化啊
052017-10-10
Python前后端分离开发Vue+Django REST framework实战
2873 学习 · 2457 问题
相似问题