登录功能
登录后更新随机串并返回。

认证:认证用户是否登录,登录了认证成功,反之认证失败。
思路:用请求头发来的token和数据库里的token对比实现认证,通过把当前用户返回,未通过抛异常。
1、建个认证类文件。
2、继承基类BaseAuthentication。
3、重写authenticate方法。
4、认证通过return 该登录的用户对象
5、认证未通过抛异常AuthenticationFailed
6、在视图类中生效:authentication_classes = ['认证类的类名']
--请求头的数据从request.META里拿(字典)。请求头里request.点不出来的数据也从request.meta里拿
认证的全局、局部使用
全局使用:在drf的配置文件中配置。
REST_FRAMEWORK = {
# 全局使用写的认证类
'DEFAULT_AUTHENTICATION_CLASSES':['app01.auth.LoginAuth'], 应用名,认证类的文件名,认证类的类名
}
局部使用:authentication_classes = [Book_Auth,]
局部禁用:authentication_classes = [ ]
局部禁用要写在视图层的登录类下面。
认证类的源码分析:
wv
权限组件
思路:权限是在认证组件之后,用认证返回的用户对象判断是否是VIP。
1、继承基类BasePermission。
2、重写has_permission方法。
3、有权限返回True,反之返回False
4、在视图类中生效:permission_classes = ['权限类的类名']
---全局使用,局部使用,局部禁用和认证组件都是一样的操作。
需求:1是超级用户有权限访问,2是普通用户没权限访问。
有权限返回True,反之返回False
# 权限类 通过VIP和普通会员区别。
class Book_Perm(BasePermission):
def has_permission(self, request, view):
if request.user.user_type == 1: # user是认证通过后返回的登录对象,用户类型是1就是VIP用户
return True
else:
return False
源码分析
wv
频率组件:作用是防爬虫,在一定时间内请求过多(洪水攻击),限制用户在一定时间内访问的次数。
1、类继承SimpleRateThrottle。
2、重写get_cache_key方法。
3、设置scope = 'ip_throttle' 这个字符串名字随意
4、返回什么就以什么做限制,通常以ip。
5、在视图类中配置:throttle_classes = [Throttle_Restrict] # 列表里写类名,这个也是局部使用,局部禁用的化空列表。
6、在配置文件中配置。(这个配置跟全局频率没关系)
'DEFAULT_THROTTLE_RATES': {
'ip_throttle':'3/m' # 一分钟最多访问三次。 key必须是scope对应着的
}


浙公网安备 33010602011771号