请问老师如何将请求中的一些信息写入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进行序列化啊

0
5
天真男
回复
bobby
多谢老师
2017-10-10
共5条回复

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2873 学习 · 2457 问题

查看课程