1. 重写get_swagger_view函数:
关键语句:
permission_classes = [permissions.IsAuthenticated]
# 将get_swagger_view函数代码复制一份,修改里面的permission_classes
def get_swagger_view(title=None, url=None, patterns=None, urlconf=None):
"""
登录访问API文档
Returns schema view which renders Swagger/OpenAPI.
"""
class SwaggerSchemaView(APIView):
_ignore_model_permissions = True
exclude_from_schema = True
# 将permission_classes中原来的AllowAny改成IsAuthenticated即可
permission_classes = [permissions.IsAuthenticated]
renderer_classes = [
CoreJSONRenderer,
renderers.OpenAPIRenderer,
renderers.SwaggerUIRenderer
]
def get(self, request):
generator = SchemaGenerator(
title=title,
url=url,
patterns=patterns,
urlconf=urlconf
)
schema = generator.get_schema(request=request)
if not schema:
raise exceptions.ValidationError(
'The schema generator did not return a schema Document'
)
return Response(schema)
return SwaggerSchemaView.as_view()
2. urls.py里配置路由
from heat_backends.account.views import Index, get_swagger_view
schema_view = get_swagger_view(title='HEAT API')
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 配置路由
url(r'^docs/', schema_view),
url(r'^api-auth/', include('rest_framework.urls')),
]
3. setting.py里设置swagger
SWAGGER_SETTINGS = {
# 基础样式
'SECURITY_DEFINITIONS': {
"basic": {
'type': 'basic'
}
},
# 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的.
'LOGIN_URL': 'rest_framework:login',
'LOGOUT_URL': 'rest_framework:logout',
# 接口文档中方法列表以首字母升序排列
# 'APIS_SORTER': 'alpha',
# 如果支持json提交, 则接口文档中包含json输入框
'JSON_EDITOR': True,
# 方法列表字母排序
'OPERATIONS_SORTER': 'alpha',
'VALIDATOR_URL': None,
}
差不多这些吧,另外的就是需要注意把rest_framework_swagger配置在INSTALLED_APPS,祝使用愉快!?