首页 > 其他分享 >认证于权限

认证于权限

时间:2023-04-04 17:25:55浏览次数:27  
标签:自定义 request 认证 authentication user 权限

  • drf认证组件
  • 在主应用的settings中配置,此时的认证和权限是全局的,若部分视图不需要权限于认证处理只需要将类名置空即可
  • """drf配置信息"""
    REST_FRAMEWORK = {
        #循环认证,一旦认证成功则不会往下再去认证
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'Restful_api.authentication.CustomerDefinedAuthentication',  # 自定义认证
            'rest_framework.authentication.SessionAuthentication',#session认证
            'rest_framework.authentication.BasicAuthentication',#基础认证
    
        ],
        # 'DEFAULT_PERMISSION_CLASSES': [
        #     'rest_framework.permissions.IsAuthenticated',
        # ],
    }

     

  • 认证(Authentication)
    DRF也提供了多种认证类,用于验证用户的身份。常用的认证类包括:

    SessionAuthentication:使用Django的session机制进行认证,适用于web应用。
    TokenAuthentication:使用token进行认证,适用于移动应用等无状态应用。
    BasicAuthentication:使用HTTP基本认证进行认证。
    JSONWebTokenAuthentication:使用JSON Web Token进行认证,支持跨域认证。

  • 认证和自定义认证
  • from django.contrib.auth import get_user_model
    from rest_framework.authentication import BaseAuthentication
    
    
    class CustomerDefinedAuthentication(BaseAuthentication):
        def authenticate(self, request):
            """自定义认证方法:名字必须为 authenticate"""
            user = request.query_params.get("user")  # 获取请求参数中的user参数
            pwd = request.query_params.get("pwd")  # 获取请求参数中的pwd参数
            if user != "root" or pwd != "root":
                return None
            # 获取当前系统中用户表对应的用户模型信息
            user = get_user_model().objects.first()
            return (user, None)

     

  • from django.shortcuts import render
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.authentication import SessionAuthentication, BaseAuthentication  # drf自带认证
    from Restful_api.authentication import CustomerDefinedAuthentication  # 导入我们自定义认证
    
    
    class HomeAPIView(APIView):
        # 使用内部认证组件,或者是自定义组件
        # authentication_classes = [SessionAuthentication, BaseAuthentication]
        # authentication_classes = [CustomerDefinedAuthentication]
    
        def get(self, request):
            """单独设置认证:session认证"""
            print(request.user)
            if request.user.id is None:
                return Response("未登录用户:游客")
            else:
                return Response(f"已登录用户{request.user}")

  • 权限(Permission)
    DRF提供了多种权限类,用于限制用户访问API的权限。常用的权限类包括:

    AllowAny:允许任何人访问API。
    IsAuthenticated:只允许已登录的用户访问API。
    IsAdminUser:只允许管理员用户访问API。
    IsAuthenticatedOrReadOnly:未登录用户只能查看API,已登录用户可以进行修改操作。
    DjangoModelPermissions:根据Django模型的权限进行控制,例如Django中的add、change、delete权限。
    DjangoObjectPermissions:根据Django模型实例的权限进行控制。

  • 权限和自定义权限
  • from rest_framework.permissions import BasePermission
    
    
    class IsOwner(BasePermission):
        """自定义权限可用于全局配置或者局部配置
            返回True 允许访问
        """
        message = "只有该对象创建者才有资格访问"
    
        def has_permission(self, request, view):
            """视图权限
            """
            role = request.query_params.get("role")
            return role == "one_name"
    
        def has_object_permission(self, request, view, obj):
            """模型权限"""
            return obj.owner == request.user

     

  •  

    class HomeAPIView(APIView):
        # authentication_classes = [SessionAuthentication, BaseAuthentication]#内部认证
        # authentication_classes = [CustomerDefinedAuthentication]#自定义认证
    
        # permission_classes = [IsRootPermission]#自定义权限
        permission_classes = [IsAuthenticated]  # 为空则取消权限的识别
    
        def get(self, request):
            """单独设置认证:session认证"""
            print(request.user)
            if request.user.id is None:
                return Response("未登录用户:游客")
            else:
                return Response(f"已登录用户{request.user}")

     

  • 目录解释:在主应用下创建 一下python文件 写自定义认证和权限的代码
  •  

     

  • 全局配置时导入方式:均一致,按照setting中导入即可

标签:自定义,request,认证,authentication,user,权限
From: https://www.cnblogs.com/Debain/p/17270176.html

相关文章

  • 企业应如何选择靠谱的iso认证机构?
    企业应如何选择靠谱的iso认证机构?自去年7月1日开始,认监委发布了“关于加强认证监测市场监管认证的工作通知”,掀起行业普查,这里要强调一点“普查”。以前基本上都是抽查,明显上升了10个档次。公告出来的时候,身边不少的同事就开始人心惶惶了,担心自己在劫难逃。接下来的几个月时间里“......
  • jenkins视图权限管理
    插件安装         创建用户角色            创建项目权限     注意:这里强调下它所匹配的不是视图的名字,而是项目的名字。项目就是流水线          角色分配          ......
  • 《安富莱嵌入式周报》第308期:开源带软硬件安全认证的PLC设计,开源功率计,可靠PID实现,PR2
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1F24y157QE1、ST发布安全认证版PLC设计套件https://www.st.com/en/evaluation-tools/steval-silplc01.html含原理图(新的手册......
  • Wiki.js配置LDAP认证
    安装好wikijs之后,可以进行进一步的详细配置.这里介绍LDAP认证的配置.在管理->身份验证->添加策略->选择LDAP/AD,如下:接下来进行详细配置:显示名称:按需修改是否启用:是LDAPURL:格式为:ldap://serverhost:389orldaps://serverhost:636Admin......
  • Wiki.js配置LDAP认证
    安装好wikijs之后,可以进行进一步的详细配置.这里介绍LDAP认证的配置.在管理->身份验证->添加策略->选择LDAP/AD,如下:接下来进行详细配置:显示名称:按需修改是否启用:是LDAPURL:格式为:ldap://serverhost:389orldaps://serverhost:636Admin......
  • android 权限
    1.AIDandroid系统沿用了Linux的UID/GID权限模型,但并没有使用传统的passws和group文件来存储用户和用户组的认证凭据,作为代替,Android定义了从名称到AndroidID(AID)的映射表。system/core/include/private/android_filesystem_config.h#defineAID_ROOT0/*traditional......
  • HCIP华为认证H12-821题库(有全套题库,亲测900分)
    61、(多选题)以下关于漫游的描述,以下说法正确的是?A、实现无线漫游的AP必须有信号覆盖交叠区B、实现无线漫游的AP必须处在同一个扩展服务集(ESS)C、实现无线漫游的AP必须处在同一个基本服务集(BSS)D、实现无线漫游的AP不需要有信号覆盖交叠区正确答案是:AB解析:实现无线漫游的AP必须有......
  • ACL权限
    ACL是什么ACL的全称是AccessControlList(访问控制列表),一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。......
  • Idea 学生认证
    Idea学生认证具体步骤认证地址操作如图具体步骤认证地址https://www.jetbrains.com/community/education/#students操作如图学生邮箱会收到来信认证完成!......
  • macOS 运行xxx.command文件提示”无法执行,因为您没有正确的访问权限“解决方法
    使用苹果mac电脑运行.command文件时,是否遇到弹出”无法执行,因为您没有正确的访问权限“的窗口?遇到这种问题怎么解决呢?这里小编为大家带来了详细的解决方法,一起来看看吧!解决方法:方法一:打开终端工具,输入以下命令:sudosh注意后面有空格然后再把.command文件直接拖入终端按回车......