• drf认证组件


    昨日回顾:
        -HyperlinkedIdentityField(用来生成url),传三个参数
            -实例化序列化类的时候,BookSerializer(ret, many=True, context={'request': request})
        -序列化组件的数据校验
            -类比forms组件
            -局部(value是该字段的值)
                -validate_字段名(self,value)
            -全局钩子函数(通过校验值的字典)
                -validate(self,value)
                
        -认证
            -写一个类:
                class LoginAuth():
                    # 函数名一定要叫authenticate,接收必须两个参数,第二个参数是request对象
                    def authenticate(self, request):
                        # 从request对象中取出token(也可以从其它地方取)
                        token = request.query_params.get('token')
                        # 去数据库过滤,查询
                        ret = models.UserToken.objects.filter(token=token)
                        if ret:
                            # 能查到,说明认证通过,返回空
                            # ret.user就是当前登录用户对象,一旦retrun了,后面的认证类都不执行了
                            return ret.user,ret
                        # 如果查不到,抛异常
                        raise exceptions.APIException('您认证失败')
            
            -局部使用:
                -在视图类中加一行:
                -authentication_classes = [LoginAuth, ]
            -全局使用
                -在setting中配置:
                    REST_FRAMEWORK={
                        'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.LoginAuth',]
                    }
                -局部禁用:                
                    -在视图类中加一行:
                        -authentication_classes = []
            
        -token表设置超时时间字段
        -token原理
            -'adfasdfasd'
            -'sdafasdfasf|{id:1,'name':}'
            -'asdfasdasd|2'
            
            
        -权限
            权限是什么?
            -写一个类
                class UserPermission():
                    # message是出错显示的中文
                    message='您没有权限查看'
                    def has_permission(self, request, view):
                        user_type = request.user.user_type
                        # 取出用户类型对应的文字
                        # 固定用法:get_字段名字_display()
                        user_type_name = request.user.get_user_type_display()
                        print(user_type_name)
                        if user_type == 2:
                            return True
                        else:
                            return False
            -使用
                -局部使用
                    -在视图类中加一行:
                    -permission_classes = [LoginAuth, ]
                    
                -全局使用
                    -在setting中配置
                        REST_FRAMEWORK={
                            'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.UserPermission',]
                        }
                    -局部禁用
                        -在视图类中加一行:
                        -permission_classes = [ ]
        
            
    
        
        
  • 相关阅读:
    CentOS 6.5 源码安装subversion-1.8.8,附加mod_dav_svn模块
    MySQL建表设置外键提示错误
    Servlet3.0提供的异步处理
    Servlet3.0使用@WebServlet注解配置问题记录
    我的博客开通啦!
    关于Wii的蓝牙接收
    关于Wii的软件制作
    提升学习算法简述:AdaBoost, GBDT和XGBoost
    决策树中的熵和基尼指数
    机器学习排序算法:RankNet to LambdaRank to LambdaMART
  • 原文地址:https://www.cnblogs.com/xuqidong/p/13394653.html
Copyright © 2020-2023  润新知