You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Django REST Framework使GET方法必须完成身份认证才可访问

解决方案

按以下步骤排查配置即可实现需求:

  1. 确认权限类导入正确
    确保views.py头部存在正确导入语句,避免导入其他包同名的权限类:
from rest_framework.permissions import IsAuthenticated
  1. 校验全局权限配置
    DRF默认的全局权限为AllowAny,但类中配置的permission_classes优先级高于全局配置,可补充全局默认权限配置避免其他视图出现同类问题:
# settings.py  REST_FRAMEWORK 配置项中添加
'DEFAULT_PERMISSION_CLASSES': [
    'rest_framework.permissions.IsAuthenticated',
]
  1. 修正Swagger安全配置
    你当前遇到的权限不生效问题大概率是Swagger未正确配置安全认证规则,导致点击Authorize后认证信息没有带入接口请求中,根据你使用的Swagger库对应配置即可:
  • 若使用drf-yasg:
# settings.py 新增配置
SWAGGER_SETTINGS = {
    'USE_SESSION_AUTH': True,
    'SECURITY_DEFINITIONS': {
        'Basic': {
            'type': 'basic'
        },
        'Session': {
            'type': 'apiKey',
            'in': 'cookie',
            'name': 'sessionid'
        }
    }
}
  • 若使用drf-spectacular:
# settings.py SPECTACULAR_SETTINGS 配置项中添加
'SECURITY': [
    {'basicAuth': []},
    {'sessionAuth': []},
],
'SECURITY_SCHEMES': {
    'basicAuth': {
        'type': 'http',
        'scheme': 'basic',
    },
    'sessionAuth': {
        'type': 'http',
        'scheme': 'session',
    }
},
  1. (可选)方法级权限配置
    如果类级别的权限配置仍不生效,可直接给指定请求方法加权限装饰器:
from rest_framework.decorators import permission_classes

class ExampleList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
    queryset = ExampleModel.objects.all()
    serializer_class = ExampleSerializer

    @permission_classes([IsAuthenticated])
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

配置完成后清除浏览器缓存,在Swagger的Authorize选项完成认证后再请求接口即可,未认证用户请求会返回403状态码。

内容的提问来源于stack exchange,提问作者Mario Mateaș

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:45:03