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

如何在urls.py中控制用户登录权限?(drf_auto_endpoint场景)

在urls.py中实现用户登录权限控制的方案

因为你无法修改drf_auto_endpoint库,以下几种方案可以在不修改库代码的前提下,为接口添加登录权限控制:

方案一:修改路由视图的权限配置

直接在你的urls.py中遍历router的所有视图,为它们添加认证权限:

from drf_auto_endpoint.router import router
from rest_framework.permissions import IsAuthenticated

# 为router中所有视图添加登录认证权限
for url_pattern in router.urls:
    # 检查视图是否有view_class属性(DRF视图类的特征)
    if hasattr(url_pattern.callback, 'view_class'):
        view_class = url_pattern.callback.view_class
        # 保留原有权限(如果存在),追加IsAuthenticated权限
        if hasattr(view_class, 'permission_classes'):
            view_class.permission_classes = list(view_class.permission_classes) + [IsAuthenticated]
        else:
            view_class.permission_classes = [IsAuthenticated]

# 正常配置路由
urlpatterns = [
    # ... 其他路由
    path('api/v1/', include(router.urls)),
]

这个方法会批量给router生成的所有接口添加登录要求,无需修改库代码。

方案二:全局设置DRF默认权限

如果你的项目中所有接口都需要登录认证,可以直接在settings.py中配置DRF的全局默认权限:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

这种方式会对所有DRF视图生效,包括drf_auto_endpoint生成的接口,配置最简单。

方案三:用装饰器包裹路由组

如果需要更灵活的控制(比如仅部分接口需要认证),可以创建一个带权限的包装视图,将router的路由通过这个视图转发:

from django.urls import path
from drf_auto_endpoint.router import router
from rest_framework.decorators import permission_classes, api_view
from rest_framework.permissions import IsAuthenticated
from django.http import HttpResponseNotFound

# 带权限的包装视图
@api_view(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
@permission_classes([IsAuthenticated])
def protected_api_router(request, *args, **kwargs):
    # 匹配router中的对应视图
    for url_pattern in router.urls:
        match = url_pattern.resolve(request.path_info.replace('/api/v1/', '', 1))
        if match:
            return match.func(request, *args, **match.kwargs)
    return HttpResponseNotFound()

urlpatterns = [
    # ... 其他路由
    path('api/v1/<path:path>', protected_api_router),
]

注意这个方法需要调整路由匹配规则,将原include(router.urls)替换为指向包装视图的路径。


内容的提问来源于stack exchange,提问作者edche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:30:43