zoukankan      html  css  js  c++  java
  • 认证之匿名用户

    需求:匿名用户和User都能访问这条url

    path('host/', views.HostView.as_view({'get': 'list'})),  # 匿名测试

    流程:

      1、认证时,User访问返Tuer,匿名用户必须返回None,即不处理

    # 认证类
    class Authentication(object):
    
        def authenticate(self, request):
            token = request.GET.get('token')
            obj = models.Token.objects.filter(token=token).first()
            if obj:
                # return obj.user.username, obj.token
                return obj.user, obj.token
            else:
                # raise exceptions.AuthenticationFailed('验证失败')
                return None
        # 不加这个方法会报错
        def authenticate_header(self, request):
            pass
    # 匿名用户和User都能访问
    class HostView(viewsets.ModelViewSet):
        authentication_classes = [utils.Authentication]  # 认证是匿名还是User,匿名用户在认证时返回None
        pagination_class = []  # 都能访问不需要加权限
    
        def list(self, request, *args, **kwargs):
            print(request.data)
            return Response('我是匿名用户')

      2、其它正常视图的权限便要加多一层处理,需要判断当前访问对象时User还是匿名用户

    # 权限类
    class PermissionCheck(object):
        message = "请登录"
    
        # 这里的request属于APIview重新构造的reuqest,经过认证后,认证组件返回一个request.user和request.auth,
        # 这两个的返回结果在自己的认证类中自定义返回的结果,所以这里能够直接调用
        def has_permission(self, request, view):
            if request.user:  # 如果是用户 继续走下一条权限
                return True
            else:
                return False
    
    class PermissionCheckTwo(object):
        message = "你不是超级管理员"
        def has_permission(self, request, view):
            if request.user.role == 3:
                return True
            else:
                return False
    class BookView(viewsets.ModelViewSet):
        authentication_classes = [utils.Authentication, ] 
        permission_classes = [utils.PermissionCheck, utils.PermissionCheckTwo]  # 加多一次权限验证
        queryset = models.Book.objects.all()
        serializer_class = serializers.BookSerializers

    也可以在settings中设置匿名用户:  

    REST_FRAMEWORK = {
        'UNAUTHENTICATED_USER': None,
        'UNAUTHENTICATED_TOKEN': None,
    }
  • 相关阅读:
    VC2013一些感受
    第三周 分析程序题
    进度条——持续更新
    怪自己,不怪书
    源程序版本管理软件和项目管理软件
    学习进度条
    个人最终总结
    win8以上windows系统eclipse环境下图片显示乱码问题解决
    黄金点游戏
    编码用命令行执行的C语言词语统计程序
  • 原文地址:https://www.cnblogs.com/aizhinong/p/12549396.html
Copyright © 2011-2022 走看看