我想使用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对象。可能有关于如何通过权限类的想法吗?
答案 0 :(得分:0)
对于任何遇到此问题的人。通过执行以下操作是可能的:
from rest_framework.permissions import IsAdminUser
path('api/docs', include_docs_urls(
title=API_TITLE, description=API_DESCRIPTION, permission_classes=[IsAdminUser]
))
我希望可以更好地记录此内置API文档工具。花了我一段时间才发现它存在。...