首页 > 解决方案 > 如何在 django URL 上为导入的视图设置身份验证和权限

问题描述

我想使用 django REST 框架的内置 API 文档。问题是我需要通过登录将其设为私有,而到目前为止我无法管理。我执行以下操作来创建我的 API 文档,如记录:

from rest_framework.documentation import include_docs_urls

API_TITLE = "Cool title"
API_DESCRIPTION = "Badass description"


urlpatterns = [
    path('docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION)

这创建了我的文档,这太棒了。但即使我已将所有端点的权限和身份验证设置为私有,每个人都可以访问它。我在我的配置中这样做了:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAdminUser',
    )

}

但即使有了这个集合,我也可以访问文档的所有站点。

所以我正在寻找一种方法来保护我导入的 URL,因此我没有可以保护的类或方法。(所以我不能在它们上使用任何装饰器)。然后我尝试在我的 URL 上使用 login required 装饰器,如下所示:

path('docs/', login_required(include_docs_urls(title=API_TITLE, description=API_DESCRIPTION))),

但它抛出了以下错误:django.template.exceptions.TemplateDoesNotExist: registration/login.html

有没有办法保护这些 URL?

非常感谢您的帮助!提前非常感谢!

编辑:我想我可以将权限类作为参数传递给我的 URL,而且 Pycharm 确实将其标记为一个选项。所以我放了:

path('docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION, permission_classes= "rest_framework.permissions.IsAdminUser")),

这给我抛出了错误 str 对象不可调用。关于我如何在那里通过我的许可课程的任何想法?

标签: djangoauthenticationdjango-rest-frameworkdjango-authenticationdjango-permissions

解决方案


对于任何有这个问题的人。可以通过执行以下操作:

from rest_framework.permissions import IsAdminUser

    path('api/docs', include_docs_urls(
        title=API_TITLE, description=API_DESCRIPTION, permission_classes=[IsAdminUser]
    ))

我希望这个内置的 API 文档工具被记录得更好。我花了一段时间才发现这存在....


推荐阅读