from django.http import HttpResponse, JsonResponse from rest_framework.schemas import SchemaGenerator from django.http import QueryDict from rest_framework.request import Request from rest_framework.views import APIView from rest_framework.permissions import AllowAny from rest_framework.schemas import SchemaGenerator from rest_framework.schemas.generators import LinkNode, insert_into from rest_framework.renderers import * from rest_framework_swagger import renderers from rest_framework.response import Response import rest_framework class MySchemaGenerator(SchemaGenerator): def get_links(self, request=None): links = LinkNode() paths = [] view_endpoints = [] for path, method, callback in self.endpoints: view = self.create_view(callback, method, request) path = self.coerce_path(path, method, view) paths.append(path) view_endpoints.append((path, method, view)) # Only generate the path prefix for paths that will be included if not paths: return None prefix = self.determine_path_prefix(paths) for path, method, view in view_endpoints: if not self.has_view_permissions(path, method, view): continue link = view.schema.get_link(path, method, base_url=self.url) if method=='GET': link._fields += self.get_core_fields_get(view) if method=='POST': link._fields += self.get_core_fields_post(view) subpath = path[len(prefix):] keys = self.get_keys(subpath, method, view) insert_into(links, keys, link) return links def get_core_fields_get(self, view): rest_framework.schemas.inspectors.AutoSchema return getattr(view, 'coreapi_fields_get', ()) def get_core_fields_post(self, view): return getattr(view, 'coreapi_fields_post', ()) class SwaggerSchemaView(APIView): _ignore_model_permissions = True exclude_from_schema = True permission_classes = [AllowAny] renderer_classes = [ CoreJSONRenderer, renderers.OpenAPIRenderer, renderers.SwaggerUIRenderer ] def get(self, request): generator = MySchemaGenerator(title='api接口', description='''api接口''') schema = generator.get_schema(request=request) return Response(schema) def DocParam(name="default", location="query", required=True, description=None, type="string", *args, **kwargs): return coreapi.Field(name=name, location=location, required=required, description=description, type=type) def get_parameter_dic(request, *args, **kwargs): if isinstance(request, Request) == False: return {} query_params = request.query_params if isinstance(query_params, QueryDict): query_params = query_params.dict() result_data = request.data if isinstance(result_data, QueryDict): result_data = result_data.dict() if query_params != {}: query_params else: return result_data
from django.conf.urls import url,include from django.contrib import admin from rest_framework import routers import mysite.views as views from rest_framework.schemas import get_schema_view import rest_framework_swagger from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer]) # # urlpatterns = [ # url(r'^admin/', admin.site.urls), # url(r'^api/', include('src.emoc.urls')), # url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) # ] urlpatterns = [ url(r'^docs/', schema_view, name='apiDocs'), url(r'^docs1/', views.SwaggerSchemaView.as_view(), name='apiDocs1'), url(r'^admin/', admin.site.urls), url(r'^',include(router.urls)), url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')), url(r'^api/getjson', views.ReturnJson.as_view()), url(r'^api/getjson1', views.ReturnJson1.as_view()), ]