如何为导入的视图在Django URL上设置身份验证和权限

时间:2019-12-05 09:18:16

标签: django authentication django-rest-framework django-authentication django-permissions

我想使用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上使用需要登录的修饰符,如下所示:

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对象。可能有关于如何通过权限类的想法吗?

1 个答案:

答案 0 :(得分:0)

对于任何遇到此问题的人。通过执行以下操作是可能的:

from rest_framework.permissions import IsAdminUser

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

我希望可以更好地记录此内置API文档工具。花了我一段时间才发现它存在。...