首页 > 其他 > 详细

视图与序列化传参

时间:2019-10-19 22:20:28      阅读:53      评论:0      收藏:0      [点我收藏+]
# 1)在视图类中实例化序列化对象时,可以设置context内容
# 2)在序列化类中的局部钩子、全局钩子、create、update方法中,都可以用self.context访问视图类传递过来的内容


# 需求:
# 1) 在视图类中,可以通过request得到登陆用户request.user
# 2) 在序列化类中,要完成数据库数据的校验与入库操作,可能会需要知道当前的登陆用户,但序列化类无法访问request
# 3) 在视图类中实例化序列化对象时,将request对象传递进去

视图层:views.py

class Book(APIView):
    def post(self, request, *args, **kwargs):
        book_ser = serializers.BookModelSerializer(data=request_data,context={request:request})
        book_ser.is_valid(raise_exception=True)
        book_result = book_ser.save()
        return Response({
            status: 0,
            msg: ok,
            results: serializers.BookModelSerializer(book_result).data
        })

序列化层:serializers.py

class BookModelSerializer(ModelSerializer):
    class Meta:
        model = models.Book
        fields = (name, price)
    def validate_name(self, value):
        print(self.context.get(request).method)
        return value

 

总结:context属性是在BaseSerializer中初始化好的 

class BaseSerializer(Field):
   
    def __init__(self, instance=None, data=empty, **kwargs):
        self.instance = instance
        if data is not empty:
            self.initial_data = data
        self.partial = kwargs.pop(partial, False)
        self._context = kwargs.pop(‘context‘, {})    #是一个字典   因此在外部实例化时可以调用
        kwargs.pop(many, None)
        super().__init__(**kwargs)

 

视图与序列化传参

原文:https://www.cnblogs.com/s686zhou/p/11705872.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!