django-rest-framework中的用户认证,权限和节流

这篇博客详细介绍了如何在Django REST Framework中进行用户注册、登录、认证和权限设置,并探讨了如何实现节流限制,保护API接口的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认证和权限

用户注册

设计数据模型,设计字段标识用户权限
实际就是数据的添加
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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值