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()),
]