• drf 序列化 认证


    序列化

      对象,转成json格式

      用drf的序列化组件

        定义一个类继承class BookSerializer(serializers.Serializer):

          -写字段,如果不指定source,字段名必须跟数据库字段名对应(source指定的值跟字段名不能重复)

          -source还可以指定方法

          -publish = serializers.SerializerMethodField()

          def get_publish(self,obj):

            obj.publish

          -Serializer

        -ModelSerializer

          class Meta:

            #指定表模型

            model = models.Book

            #序列化所有字段

            fields = '__all__'

            # 只想序列化title和id这两字锻

            # fields = ['title','id']

            # exclude和fields 不要连用

            # exclude = ['title']

            depth = 1

      认证组件

        -比如要访问books/路径,必须登录之后才能访问

        -一旦登录成功,在响应结果中写一个随机字符串

          {

            status:100,

            msg:登录成功,

            token:safsdaagsd

          }

        -只要用了drf,post提交数据,就不需要csrf验证了

        -token可以放在redis中;不在服务端存

        -{name:lqz,id:1}

        -把{name:lqz,id:1} 当作token,发到客户端

        -asdfasdf|{name:lqz,id:1} 当作token,发到客户端

        -以后客户端再发请求,会携带dafasdag|{name:lqz,id:1}过来

        -服务端截取{name:lqz,id:1}.再用我的加密方式加密:adsfags

        -假设它模拟成fsdagasg和请求的sadfasdg比较,如果一样就是登陆成功

        -token好处是,服务端不需要存session了

        -认证功能

          1.写一个类,继承BaseAuthentication

          2.def authenticate(self,request),记住传request对象

            -如果验证通过,返回None或者两个值

          3.在视图类中使用:(不要加括号)

            authentication_classes=[AuthLogin]

        -认证功能的局部配置

          -authentication_classes = [AuthLogin]

        -认证功能的全局配置,在settings.py中配置

          -REST_FRAMWORK = {

              "DEFAULT_AUTHENTICATION_CLASSES":["app01.auth.AuthLogin",]

            }

        -全局使用的局部禁用:

          authentication_classes=[]

        -drf内置了一些认证类(了解):

          -TokenAuthentication

          -SessionAuthentication

        -BaseAuthentication(规范了接口,模拟其他语言接口的概念)

          -def authenticate(self,request):

            raise NotlmplementedErroe(".authenticate() must be overridden.")

          如果写了一个类,继承BaseAuthentication,但是没有重写authenticate,就会抛异常

        -importlib

        -choice的用法

          # 0 是超级用户,1是普通用户,2是2b用户

            user_choice = ((0,'超级用户'),(1,'普通用户'),(2,'2b用户'))

            user_type = models.IntegerField(default=0,choices = user_choice)

            -取文字:

              print(user.get_user_type_display())

        

  • 相关阅读:
    堆排序
    2019晋城一中开放日
    严格次小生成树
    遥远的国度
    noip2018游记
    Luogu1736 创意吃鱼法
    P3958 奶酪
    Luogu3385 负环
    Luogu1040 加分二叉树
    Luogu1007 独木桥
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/10451642.html
Copyright © 2020-2023  润新知