from django.contrib.auth.backends import ModelBackend from django.contrib.auth import get_user_model from django.db.models import Q from rest_framework import mixins from rest_framework.mixins import CreateModelMixin from rest_framework import viewsets from rest_framework.response import Response from rest_framework import status from rest_framework import permissions from rest_framework import authentication from random import choice from rest_framework_jwt.serializers import jwt_encode_handler,jwt_payload_handler#这两步是生成token关键源码 from rest_framework_jwt.authentication import JSONWebTokenAuthentication from utils.yunpian import YunPian from MxShop.settings import APIKEY from .serializers import SmsSerializer,UserRegisterSerializer,UserDetailSerializer from .models import VerifyCode User = get_user_model() class UserViewset(CreateModelMixin,mixins.RetrieveModelMixin,viewsets.GenericViewSet): """ 用户 """ serializer_class = UserRegisterSerializer queryset = User.objects.all() authentication_classes = (authentication.SessionAuthentication,JSONWebTokenAuthentication) # permission_classes = (permissions.IsAuthenticated,) def get_serializer_class(self): #动态的加载序列化器 if self.action == "retrive": return UserDetailSerializer elif self.action == "create": return UserRegisterSerializer return UserDetailSerializer def get_permissions(self): #动态加载权限验证(看源码然后重载这个方法) if self.action == "retrive": return [permissions.IsAuthenticated()] elif self.action == "create": return [] return [] def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = self.perform_create(serializer) # token返回的时候,是返回serializer.data,因此要放在data里边 re_dict = serializer.data payload = jwt_payload_handler(user) #要和前端保持一致,前端也叫token re_dict["token"] = jwt_encode_handler(payload) re_dict["name"] = user.name if user.name else user.username headers = self.get_success_headers(serializer.data) return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers) def get_object(self): return self.request.user #重载上面create中的perform_create方法 def perform_create(self, serializer): return serializer.save()
什么是动态DRF08-个人中心功能开发
未经允许不得转载:上海聚慕医疗器械有限公司 » 什么是动态DRF08-个人中心功能开发







