继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

自定义token方式修改/查询object信息

无无法师
关注TA
已关注
手记 44
粉丝 54
获赞 130
自定义以token方式获取object信息

目标:通过header里传入的token取到对应账号信息。
问题描述:
Django rest framework内的retrive方法默认是通过pk传递参数而选择对应的object信息。我需要改成通过header内的token取对应user,在通过user取user-address表里面的账号信息
结果图
图片描述
原来代码:

    def get_object(self):
        queryset = self.filter_queryset(self.get_queryset())

        # Perform the lookup filtering.
        lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field

        assert lookup_url_kwarg in self.kwargs, (
            'Expected view %s to be called with a URL keyword argument '
            'named "%s". Fix your URL conf, or set the `.lookup_field` '
            'attribute on the view correctly.' %
            (self.__class__.__name__, lookup_url_kwarg)
        )

        filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
        obj = get_object_or_404(queryset, **filter_kwargs)

        # May raise a permission denied
        self.check_object_permissions(self.request, obj)

        return obj

按照原来代码的样式进行模仿
图片描述
修改代码:

class AccountUserRetrieveUpdate(generics.RetrieveUpdateAPIView):
    queryset = AccountUser.objects.all()
    serializer_class = AccountUserSerializer
    def get_object(self):
        queryset = self.filter_queryset(self.get_queryset())
        filter_kwargs = {'name':self.request.user}
        obj = get_object_or_404(queryset,**filter_kwargs)
        self.check_object_permissions(self.request, obj)

        return obj

由于put,patch,get这些方法都使用get_object方法,所以put,get,patch都可以以token的方式修改。
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP