首页 > 编程语言 >drf三大认证之权限源码解析

drf三大认证之权限源码解析

时间:2022-10-09 20:34:42浏览次数:51  
标签:permission APIView self request 源码 权限 三大 drf

1.认证,频率,权限的源码解读入口就是APIView源码的dispatch方法的三大认证,全局异常处理
   self.initial(request, *args, **kwargs)

2.查看APIView的initial里面的三句代码 就是三大认证
        self.perform_authentication(request)   认证
        self.check_permissions(request)        权限
        self.check_throttles(request)          频率

3.先查看权限 在APIView的check_permissions 
   for permission in self.get_permissions():   # 主要查看get_permissions()
          if not permission.has_permission(request, self):
                self.permission_denied(
                    request,
                    message=getattr(permission, 'message', None),
                    code=getattr(permission, 'code', None)
                )

4.查看APIView里的get_permissions 
  return [permission() for permission in self.permission_classes] 
  # 列表推导式  从self.permission_classes中获取到permission然后加括号执行
   '''self.permission_classes就是自己编写的在视图类中写的权限列表,取出里面的permission加括号调用,
      所以get_permissions返回的就是自己写的权限类的对象列表UserTypePermission()
      那么第三条for permission in 【UserTypePermission()】: 就是在循环自己的权限对象列表
   '''

5.为什么要重写has_permission方法
   if not permission.has_permission(request, self):
   这里的permission就是权限对象,而我们重写的has_permission(self, request, view):传了三个参数
   '''这里的三个参数分别是:
     self对象调用类里面的方法,会将自身当作第一个参数传入 (源码里没有写,其实自动传入了)
     request还是那个新的request
     view是视图函数的对象,也就是APIView里的对象  (因为是在APIView中执行的所以源码里的参数是self,)
   '''

   所以重写has_permission方法,如果返回的是Ture,就是有权限,如果返回的是False,那么没有权限
   而源码里的has_permission方法只有在重写返回值是false的时候才会执行里面的message
    class UserTypePermission(BasePermission):
    def has_permission(self, request, view):
        if request.user.user_type == 1:
            return True
        else:
            self.message = '您是%s,您没有权限访问' % request.user.get_user_type_display()
            # 这里的message就是源码里的message
            return False

标签:permission,APIView,self,request,源码,权限,三大,drf
From: https://www.cnblogs.com/Hsummer/p/16773548.html

相关文章

  • Go Mutex 源码详解
    前言在上一篇文章中,我们一起学习了如何使用​​Go​​​中的互斥锁​​Mutex​​​,那么本篇文章,我们就一起来探究下​​Mutex​​底层是如何实现的,知其然,更要知其所以......
  • drf学习-7
    一、内容回顾1、drf路由的使用  路由有三种写法    -视图类.as_view    -视图类.as_view({'get':'list'})    -自动生成路由      导入——实例......
  • 【2022-10-09】DRF从入门到入土(七)
    drf组件之权限类使用#认证:校验用户是否登录,登录认证#用户登录了,某个接口可能只有超级管理员才能访问,普通用户不能访问#出版社的所有接口,必须登录,而且是超级管理员才......
  • 推荐一个今天误入的 源码学习网站
    今天想查看一下 spring data JPA 的源码,然后看到一个不错的源码学习网站。 链接地址:​​http://www.iocoder.cn/Spring-Data-JPA/good-collection/​​......
  • drf三大认证(认证,权限,频率)及其源码分析
    drf三大认证之认证drf三大认证之权限drf三大认证之频率drf三大认证之认证源码分析drf三大认证之权限源码分析鸭子类型drf三大认证之认证  访问接......
  • drf -三大权限认证例子
    三大权限认证测试例子代码models.pyfromdjango.dbimportmodels#Createyourmodelshere.classBook(models.Model):name=models.CharField(max_length=3......
  • drf之权限类与频率类
    一、权限类#权限就是我们在登入之后我们在访问这个接口的时候有没有访问的权限#eg:现在我们把用户等级分为两个等级,一个为vip用户,一个为普通用户然......
  • 基于SSM+Vue校园勤工助学网站Java大学生勤工俭学管理系统(源码调试+讲解+文档)
    ......
  • 权限类,频率类的使用及源码分析
    权限类的使用使用场景:用户登录后,某个接口只有管理员才能访问,普通用户不能访问例:出版社的所有接口必须登录并且士管理员才能访问使用步骤:一.写一个类,继承BasePermi......
  • 从SpringBoot启动,阅读源码设计
    服务启动堪称Spring源码设计的答案;一、背景说明初学SpringBoot框架时,第一次启动服务,直呼什么鬼?只需要简单的几步配置,几个核心的注解,就可以快速实现工程的搭建和运行;虽......