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


 

 认证:认证用户是否登录,登录了认证成功,反之认证失败。
思路:用请求头发来的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对应着的
}



 

posted on 2021-07-14 21:31  孟玉  阅读(74)  评论(0)    收藏  举报