认证和权限
用户注册
设计数据模型,设计字段标识用户权限
实际就是数据的添加
POST users
接收数据进行存储
增加了内置超级用户的功能
在创建(即用户注册)的时候去判断是否在超级用户表中
用户登录
POST users
添加区分方式,用来区分注册和登录
在query_params中添加action参数 通过action参数进行分支处理
脱离cookie
session失效
设计令牌策略
用户在登录时生成令牌,后端存储在cache中,以json格式返回给前端
用户认证
继承自系统的基类BaseAuthentication
重写认证类方法 authenticate
根据token进行认证
认证失败返回None
认证成功返回元组
第一个元素是user
第二个元素是令牌 auth或者token
用户存储在request.user
令牌存储在request.auth
用户权限
继承自系统的权限基类BasePermission
has_permission
判断 返回True 有权限,False没有权限
根据用户状态,动态返回True或False
用户认证和权限
直接配置在视图函数view上
authentication_classes = (UserAuth, )
permission_classes = (Is_Super_User, )
节流器
BaseThrottle
allow_request
请求是否允许的核心
get_ident
获取客户端唯一标识
wait
SimpleRateThrottle
get_cache_key
获取缓存标识
get_rate
获取频率
parse_rate
转换频率
num_requests/duration 请求次数/时间
allow_request
是否允许请求,重写的方法
throttle_success
允许请求,进行请求记录
throttle_failure
不允许请求
wait
还有多长时间之后允许请求
AnonRateThrottle
get_cache_key
获取缓存key的原则
UserRateThrottle
get_cache_key
获取缓存key的原则
ScopedRateThrottle
和上面一样,多写了从属性中获取频率
创建一个简单地节流器;
class UserThrottle(SimpleRateThrottle):
scope = 'user'
def get_cache_key(self, request, view):
if isinstance(request.user, UserModel):
ident = request.auth
else:
ident = self.get_ident(request)
return self.cache_format % {
'scope': self.scope,
'ident': ident
}
节流器创建好之后 在类视图中指定节流器和访问频率:
throttle_classes = (UserThrottle,)
throttle_scope = "10/m"