登录Django Admin后访问DRF列表视图提示未提供认证凭证
问题分析与解决方案
核心原因
Django Admin的会话认证和Django REST Framework(DRF)的认证机制相互独立。你虽然登录了Admin后台,但DRF默认未启用SessionAuthentication,导致API请求无法识别Admin的会话凭证,因此返回401 Unauthorized。
解决步骤
1. 配置DRF全局认证类
在项目的settings.py中,新增或修改REST_FRAMEWORK配置项,添加SessionAuthentication到默认认证类:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', # 可选,支持账号密码弹窗认证 ], }
配置后,DRF会识别浏览器的会话Cookie,与Admin共享登录状态。
2. 验证自定义权限类逻辑(可选)
检查你的IsStaffEditorPermission自定义权限类,确保它继承permissions.BasePermission并实现正确的权限判断逻辑,示例如下:
from rest_framework import permissions class IsStaffEditorPermission(permissions.BasePermission): def has_permission(self, request, view): # 示例逻辑:仅允许staff用户访问 return request.user.is_staff
若该类逻辑错误,也可能导致权限验证失败。
3. 测试访问
配置完成后,刷新Admin页面,再直接访问http://127.0.0.1:8000/api/products/,DRF会读取Admin的会话Cookie,认证通过后即可查看产品列表。你也可以在DRF可浏览API页面点击右上角的"Login"按钮,使用Admin账号登录后再访问接口。
内容的提问来源于stack exchange,提问作者Abdullah Shekfeh
相关产品推荐
相关产品推荐

