Django Rest Framework 电商项目 9-2 动态设置serializer和permission获取用户信息

在UserViewset中,已经有了create方法,是用户注册的接口。我们可以引入:

from rest_framework import mixins

使UserViewset多继承一个mixins.RetrieveModelMixin,就能获得详情了:

mixins.RetrieveModelMixin,

接口形式为uesrs/id。

但我们实际上并不知道id,因为return的时候没返回这个。我们可以通过重载get_object来实现:

def get_object(self):
    return self.request.user

添加认证逻辑:

from rest_framework import permissions
permission_classes = (permissions.IsAuthenticated, )

这样,所有的操作(注册、获取详情、修改等)都需要登录了。但注册不应该,所以这样不行,注释掉上面的代码。我们要动态的permission,重载这个函数:

 def get_permissions(self):
        if self.action == "retrieve":
            return [permissions.IsAuthenticated()]
        elif self.action == "create":
            return []

        return []

既然有登录的权限认证,就需要配置登录认证:

from rest_framework import authentication
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication )

到文档中测试。

我们需要用另外一个serializer来序列化详情信息。在serializers.py中:

class UserDetailSerializer(serializers.ModelSerializer):
    """
    用户详情序列化类
    """
    class Meta:
        model = User
        fields = ("name", "gender", "birthday", "email", "mobile")

有两个serializer,需要动态调用。在views.py中,先引入它:

from .serializers import SmsSerializer, UserRegSerializer, UserDetailSerializer

然后重载get_serializer:

    def get_serializer_class(self):
        if self.action == "retrieve":
            return UserDetailSerializer
        elif self.action == "create":
            return UserRegSerializer

        return UserDetailSerializer

再用文档测试个人详情。

发布了101 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liujh_990807/article/details/99361137
今日推荐