Django REST框架Swagger - 身份验证错误

时间:2016-09-17 13:10:40

标签: python django django-rest-framework swagger swagger-ui

我按照说明in the docs。所以这是我的观点:

from rest_framework.decorators import api_view, renderer_classes
from rest_framework import response, schemas
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer


@api_view()
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = schemas.SchemaGenerator(title='Bookings API')
    return response.Response(generator.get_schema(request=request))

我将以下内容添加到urls.py

url(r'^docs/', views.schema_view),

当我进入项目的/docs/页面时,出现以下错误:

401 : {"detail": "Authentication credentials were not provided."} http://127.0.0.1:8000/docs/?format=openapi

在浏览器控制台中,我收到了以下消息:

Unable to Load SwaggerUI init.js (line 57)

当我将permission_classes的{​​{1}}设置为schema_view时,我能够查看我的api文档。但是,我不确定这是否是正确的做法。是否有办法以管理员或任何其他用户身份登录以查看文档。另外,在浏览器中查看时如何提供身份验证令牌?也许我错过了文档中的内容。

2 个答案:

答案 0 :(得分:12)

我想我已经找到了解决方案。

settings.py中,我添加了以下设置:

SWAGGER_SETTINGS = {
    'SECURITY_DEFINITIONS': {
        'api_key': {
            'type': 'apiKey',
            'in': 'header',
            'name': 'Authorization'
        }
    },
}

然后当我加载页面时,我只需点击右上角的授权按钮,然后在文本字段中输入此值:

Token <valid-token-string>

但是,我仍然需要将schema view的权限类设置为AllowAny。身份验证令牌让我从不同的用户切换,允许我查看不同的端点集。

答案 1 :(得分:1)

  

是否有办法以管理员或任何其他用户身份登录以查看文档。

如果您只使用令牌身份验证,请先create tokens for your users,然后通过设置标头

来访问资源
curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'