首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >认证Swagger API文档(drf-yasg)

认证Swagger API文档(drf-yasg)
EN

Stack Overflow用户
提问于 2018-02-08 14:25:25
回答 1查看 10.8K关注 0票数 10

我已经设置了DRF-YASG,但无法找到如何将其配置为显示需要身份验证的视图。

下面是配置。

代码语言:javascript
复制
  schema_view = get_schema_view(
      openapi.Info(
        title="Swagger Doc",
        default_version='v1',
        description="Test description",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="contact@snippets.local"),
        license=openapi.License(name="BSD License"),
      ),
      validators=['flex', 'ssv'],
      permission_classes=(permissions.AllowAny,),  # If I change the permission it throws an exception. See below
      public=False,
      patterns=public_apis,
  )

public_apis是我希望一个人在对自己进行身份验证后看到的API。

使用上面的配置,它不会显示一个API。它只显示Authorize按钮和显示No operations defined in spec!的文本。但是如果我将public=False更改为public=True,那么它将显示所有的API。

PS:早些时候,我使用的是姜戈休息摇摆,只有在提供了JWT令牌之后,我才能够配置它来显示API。

Am正在使用JWT进行身份验证。

权限更改时的异常:

另一个问题是,如果我将上面的权限更改为DRF权限类,则呈现失败,错误如下:

代码语言:javascript
复制
  Internal Server Error: /swagger/
  Traceback (most recent call last):
    File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
      response = get_response(request)
    File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 217, in _get_response
      response = self.process_exception_by_middleware(e, request)
    File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 215, in _get_response
      response = response.render()
    File "/usr/local/lib/python3.6/site-packages/django/template/response.py", line 107, in render
      self.content = self.rendered_content
    File "/usr/local/lib/python3.6/site-packages/rest_framework/response.py", line 72, in rendered_content
      ret = renderer.render(self.data, accepted_media_type, context)
    File "/usr/local/lib/python3.6/site-packages/drf_yasg/renderers.py", line 54, in render
      self.set_context(renderer_context, swagger)
    File "/usr/local/lib/python3.6/site-packages/drf_yasg/renderers.py", line 62, in set_context
      renderer_context['title'] = swagger.info.title
  AttributeError: 'dict' object has no attribute 'info'
  Internal Server Error: /swagger/

我尝试过将它更改为permmissions.IsAuthenticated和我自己的自定义权限类,但是它们都失败了,但都有相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 03:51:30

事实证明,问题是我在DRF的DEFAULT_AUTHENTICATION_CLASSES中错过了DEFAULT_AUTHENTICATION_CLASSES

因此,通过Django Admin登录视图登录后发送的请求对象没有用户,因此所有权限类都会失败,然后会导致上述错误。

因此,在添加之后,drf显示了它的所有荣耀。

Bug:

但是,它在发生这种情况时抛出的错误是作为bug引发的。见#问题58

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48687780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档