在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:
扫描二维码关注公众号,回复:
8766029 查看本文章
def get_serializer_class(self):
if self.action == "retrieve":
return UserDetailSerializer
elif self.action == "create":
return UserRegSerializer
return UserDetailSerializer
再用文档测试个人详情。