zoukankan      html  css  js  c++  java
  • 动态设置serializer和permission获取用户信息

    一、用户详情的序列化

    users/serializers.py

    class UserDetailSerializer(serializers.ModelSerializer):
        """
        用户详情
        """
        class Meta:
            model = User
            fields = ['name', 'birthday', 'sex', 'phone', 'email']

    二、users/views.py

    class UserViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
        """
        create:
            创建用户
        retrieve:
            用户详情
        """
        serializer_class = UserRegSerializer
        queryset = User.objects.all()
        fields = ['username', 'password', 'phone']
    
        def create(self, request, *args, **kwargs):
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            user = self.perform_create(serializer)
            re_dict = serializer.data
            payload = jwt_payload_handler(user)
            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 perform_create(self, serializer):
            return serializer.save()
    
        def get_permissions(self):
            """
            动态权限配置
            :return: 空列表/IsAuthenticated
            """
            if self.action == 'retrieve':
                return [IsAuthenticated()]
            return []
    
        def get_serializer_class(self):
            """
            动态选择序列化的方式
            :return: 序列化对象
            """
            if self.action == 'create':
                return UserRegSerializer
            return UserDetailSerializer
    
        def get_object(self):
            """
            获取具体的那个用户
            :return: 用户
            """
            return self.request.user

    现在就可以从数据库获取用户的信息了

  • 相关阅读:
    Flex 学习笔记 Remoting中的作用域(转)
    Flex 学习笔记 动态设置itemRenderer
    发现一个很好玩的网站个人漫画
    AjaxLoad动态生成加载图标的网站
    如何提高大字符串(是从文本文件读取出来的,有2M多)在网页中的显示速度
    CSS纵向居中问题
    用javascript进行xsl转换
    实现鼠标感应效果
    随笔写写
    execCommand指令集
  • 原文地址:https://www.cnblogs.com/mxsf/p/10683628.html
Copyright © 2011-2022 走看看