django - 如何在 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 对象不可调用。关于我如何在那里通过我的许可课程的任何想法?
解决方案
对于任何有这个问题的人。可以通过执行以下操作:
from rest_framework.permissions import IsAdminUser
path('api/docs', include_docs_urls(
title=API_TITLE, description=API_DESCRIPTION, permission_classes=[IsAdminUser]
))
我希望这个内置的 API 文档工具被记录得更好。我花了一段时间才发现这存在....
推荐阅读
- php - 使用 LOAD DATA LOCAL INFILE 将 CSV 数据存储到 MySQL 的问题
- php - 一旦用户输入开始结束并增加温度,此代码应该为用户输出温度转换表
- android - 删除视图持有者 ItemTouchHelper.Callback 时,ClearView 无法正常工作
- sublimetext3 - 我在 sublime text 3 上找不到像 notepad++ 这样的 html 标签建议框
- python - 使用python将文件上传到共享点时出错
- ruby - 你能支持我在 Ruby 的 while 循环中使用序数吗?
- google-cloud-platform - 为什么我的云运行部署挂在“部署...”步骤?
- javascript - HTML 下载文件按钮仅保存为 HTML 文档
- c# - 什么是 CloudConfigurationManager.GetSetting(
, 错误的);? - r - 导出格式表