drf框架中认证与权限工作原理及设置
0909自我总结
drf框架中认证与权限工作原理及设置
一.概述
1.认证
工作原理
- 返回None => 游客
- 返回user,auth => 登录用户
- 抛出异常 => 非法用户
前台对于用户信息进行的判断
1)如果前台没有携带认证信息,直接定义为游客
2)如果前台携带了认证信息并认证通过,定位为登录用户,将登录的用户user对象保存在 requset.user 中
3)如果前台携带了认证信息但没有认证通过,一般都定义为游客
4 ) 可以自定义为非法用户,抛出 认证失败 异常,但是不建议直接操作
,可以交给权限组件进一步处理rest_framework.exceptions 的 AuthenticationFailed
参数
-
BasicAuthentication : 基本认证
-
SessionAuthentication : session认证
2.权限
工作原理
- 返回False => 没有权限,将信息返回给前台
- 返回True => 拥有权限,进行下一步认证(频率认证)
相关设置
- AllowAny:允许所有用户
- IsAuthenticated:只允许登录用户
- 必须request.user和request.user.is_authenticated都通过
- IsAuthenticatedOrReadOnly:游客只读,登录用户无限制
- get、option、head 请求无限制
- 前台请求必须校验 request.user和request.user.is_authenticated
- IsAdminUser:是否是后台用户
- 校验 request.user和request.user.is_staff is_staff(可以登录后台管理系统的用户)
二.局部设置
即在我们自定义的视图类开头
设置
复制# 认证 下面不一定是[],也可以()就是需要在数组当中,多个类用,隔开
# 局部取消认证组件:authentication_classes = []
# 区别启用认证组件:authentication_classes = [认证类们]
# 填写的参数BasicAuthentication,SessionAuthentication
# 权限
# 局部取消权限组件:permission_classes = []
# 区别启用权限组件:permission_classes = [权限类们]
# 填写的参数AllowAny
如
复制from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
class 类名(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication)
permission_classes = [IsAuthenticated,]
...........
三.全局设置
在setting
中设置
复制REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
# django默认session校验:校验规则 游客 及 登录用户
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.AllowAny',
# 全局配置:一站式网站(所有操作都需要登录后才能访问)
# 'rest_framework.permissions.IsAuthenticated',
],
}
四.失败返回的内容
- 401 Unauthorized 未认证
- 403 Permission Denied 权限被禁止
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理