【问题标题】:Django REST Swagger: How to add oauth2/token endpointDjango REST Swagger:如何添加 oauth2/token 端点
【发布时间】:2017-03-23 14:50:45
【问题描述】:

我正在使用 django-rest-swagger 版本 2.1.1。 我使用 oauth2_provider.urls 来构建 oauth2/token 端点,如下所示:

urlpatterns = [
    url(r'^oauth2/', include('oauth2_provider.urls', namespace='oauth2_provider')),
]

问题是 Swagger 没有将其检测为端点,因此它在我的 openapi.json 文件中丢失。

我可以对这个端点做什么才能被 Swagger 检测到?

【问题讨论】:

    标签: python django swagger django-swagger


    【解决方案1】:

    您可以覆盖 oauth2_provider 的默认 TokenView 类,如下所示:

    views.py:

    class TokenAPIView(TokenView, APIView):
        schema = ManualSchema(fields=[
            coreapi.Field(
                "client_id",
                required=True,
                location="query",
                schema=coreschema.String()
            ),
            coreapi.Field(
                "client_secret",
                required=True,
                location="query",
                schema=coreschema.String()
            ),
            coreapi.Field(
                "grant_type",
                required=True,
                location="query",
                schema=coreschema.String()
            ),
        ])
        permission_classes = (AllowAny,)
    
        server_class = oauth2_settings.OAUTH2_SERVER_CLASS
        validator_class = oauth2_settings.OAUTH2_VALIDATOR_CLASS
        oauthlib_backend_class = oauth2_settings.OAUTH2_BACKEND_CLASS
    
        def post(self, request, *args, **kwargs):
            """
            Create an oauth2 token
            """
            return super().post(request, *args, **kwargs)
    

    并且还替换了默认的 get_schema_view :

    from rest_framework.permissions import IsAuthenticated
    from rest_framework.response import Response
    from rest_framework.schemas import SchemaGenerator
    from rest_framework.views import APIView
    from rest_framework_swagger import renderers
    
    
    class SwaggerSchemaView(APIView):
        permission_classes = [IsAuthenticated]
        exclude_from_schema = True
        renderer_classes = [
            renderers.OpenAPIRenderer,
            renderers.SwaggerUIRenderer
        ]
    
        def get(self, request):
            generator = SchemaGenerator(title='API Endpoints')
            schema = generator.get_schema()
            return Response(schema)
    

    urls.py:

    oauth2_endpoint_views = [
        url(r'^token/$', TokenAPIView.as_view(), name="token"),
    ]
    
    url(r'^$', SwaggerSchemaView.as_view()),
    url(r'^oauth/', include(oauth2_endpoint_views, namespace="oauth2_provider")),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      相关资源
      最近更新 更多