您的位置:首页 > 编程语言 > Go语言

Django(61)认证组件源码分析

2021-06-11 17:16 1056 查看

认证组件源码入口

APIView
下的
dispatch
下的
self.initial(request, *args, **kwargs)
,源码如下:

def initial(self, request, *args, **kwargs):
"""
在调用方法处理程序之前运行任何需要发生的事情
"""
# 获取请求的后缀格式
self.format_kwarg = self.get_format_suffix(**kwargs)

# 确定使用哪种渲染器和媒体类型来渲染响应,并存储
neg = self.perform_content_negotiation(request)
request.accepted_renderer, request.accepted_media_type = neg

# 如果正在使用版本控制,则确定 API 版本。
version, scheme = self.determine_version(request, *args, **kwargs)
request.version, request.versioning_scheme = version, scheme

# 3大认证,确保传入请求被允许
self.perform_authentication(request)self.check_permissions(request)self.check_throttles(request)

 

三大认证

 

认证组件

self.perform_authentication(request)

认证组件作用:校验用户 -

游客
合法用户
非法用户

  • 游客:代表校验通过,直接进入下一步校验(权限校验)
  • 合法用户:代表校验通过,将用户存储在
    request.user
    中,再进入下一步校验(权限校验)
  • 非法用户:代表校验失败,抛出异常,返回
    403
    权限异常结果

 

权限组件

self.check_permissions(request)

权限组件:校验用户权限 -

必须登录
所有用户
登录读写游客只读
自定义用户角色

  • 认证通过:可以进入下一步校验(频率认证)
  • 认证失败:抛出异常,返回
    403
    权限异常结果

 

频率组件

self.check_throttles(request)

频率组件:限制视图接口被访问的

频率次数
- 限制的条件
(IP、id、唯一键)
频率周期时间(s、m、h)
频率的次数(3/s)
没有达到限次:正常访问接口 达到限次:限制时间内不能访问,限制时间达到后,可以重新访问  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: