Django DRF权限怎么加_IsAuthenticated与自定义BasePermission

DRF中IsAuthenticated未生效最常见的原因是权限类未正确注册到视图或全局配置;必须显式声明permission_classes=IsAuthenticated,且多个权限类需全部返回True才通过,顺序不可颠倒。DRF里IsAuthenticated为什么没生效?最常见的原因是权限类没正确注册到视图或全局配置里,而不是代码写错了。DRF默认不启用任何权限,IsAuthenticated必须显式声明才会起作用。全局配置写在settings.py的REST_FRAMEWORK'DEFAULT_PERMISSION_CLASSES'里,但一旦写了,所有视图都受约束------包括APIView、ViewSet甚至未登录时的登录接口本身,容易导致401循环更安全的做法是只在具体视图上加:permission_classes = IsAuthenticated,尤其适合混合权限场景(比如列表页公开、详情页需登录)注意:如果视图继承自APIView,必须用permission_classes属性;若用ViewSet,同样适用,但动作级控制得靠get_permissions()方法自定义BasePermission怎么写才不踩坑?核心就一条:has_permission(self, request, view)返回True或False,别抛异常、别返回字符串、别漏写self------这是最常被复制粘贴错的地方。判断逻辑里别直接访问request.user而忘了检查is_authenticated,未登录用户request.user是AnonymousUser,它没有is_active等属性,会抛AttributeError需要对象级权限时(比如编辑某条订单),必须实现has_object_permission(self, request, view, obj),且视图得调用get_object()触发它------单纯list()不会走这个方法多个权限类同时存在时,DRF按顺序执行,**全部返回True才算通过**,所以别把IsAuthenticated和自定义类顺序搞反,否则未登录就直接短路失败IsAuthenticated和自定义权限能一起用吗?能,而且推荐这么用:用IsAuthenticated兜底身份,再用自定义类做业务判断。但要注意组合方式不是"或",而是"与"。 知网AI智能写作 知网AI智能写作,写文档、写报告如此简单

相关推荐
程序员-Benothing37 分钟前
MySQL 的覆盖索引是什么?
数据库·mysql
zzz_236840 分钟前
TencentDB-Agent-Memory 深度解析:让多个 Agent 共享项目经验的记忆中枢
java·开发语言·jvm·人工智能·agent·memory·tencent db
DeepVisionary44 分钟前
再观察小星火:当大厂分成“冰封“,国产轻模式创作者平台如何跑出加速度
python·自动化
gb42152871 小时前
python中unstructured库和langchain-unstructured库在解析pdf文件的时候的区别?
python·langchain·pdf
vx-程序开发1 小时前
django医院预约挂号系统---附源码23353
java·javascript·spring boot·python·eclipse·django·php
阿宇的技术日志1 小时前
堆溢出解决思路
jvm
数翊科技1 小时前
权威认可!HexaDB海纳分布式HTAP数据库通过CCRC EAL4增强级认证
数据库
星恒讯工业路由器1 小时前
MIMO与多天线技术:从5G到WiFi的工程解析
数据库·mysql·5g·工业物联网·mimo技术·天线隔离度·5g/wifi多天线
deepdata_cn1 小时前
向量数据库赋能研报智能分析、舆情检索、风险洞察
数据库·向量数据库
雪山青木1 小时前
全国微博签到数据201912-202004
大数据·爬虫·python·数据挖掘·数据分析·新浪微博