1. 程式人生 > >Django rest_framework_swagger登入之後才能訪問API文件

Django rest_framework_swagger登入之後才能訪問API文件

1. views.py裡新增檢視函式:

permission_classes = [permissions.IsAuthenticated]
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 = [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,祝使用愉快!?