django rest_framework swagger使用案例


環境准備

  環境要求:

  python3

  django2

  pip3

  模塊安裝:

  pip3 install django-rest-framework

  pip3 install django-rest-swagger

  搭建項目:

  搭建django項目,創建testapi app

參數配置

  setting.py: 

  INSTALLED_APPS中添加:rest_framework,rest_framework_swagger

  

 

視圖編輯

  編輯views.py

  

 1 # Create your views here.
 2 # -*- coding: utf-8 -*-
 3 
 4 from rest_framework.views import APIView
 5 
 6 from rest_framework.permissions import AllowAny
 7 from rest_framework.schemas import SchemaGenerator
 8 from rest_framework.schemas.generators import LinkNode, insert_into
 9 from rest_framework.renderers import *
10 from rest_framework_swagger import renderers
11 from rest_framework.response import Response
12 
13 # from rest_framework.schemas import SchemaGenerator
14 class MySchemaGenerator(SchemaGenerator):
15 
16     def get_links(self, request=None):
17         # from rest_framework.schemas.generators import LinkNode,
18         links = LinkNode()
19 
20         paths = []
21         view_endpoints = []
22         for path, method, callback in self.endpoints:
23             view = self.create_view(callback, method, request)
24             path = self.coerce_path(path, method, view)
25             paths.append(path)
26             view_endpoints.append((path, method, view))
27 
28         # Only generate the path prefix for paths that will be included
29         if not paths:
30             return None
31         prefix = self.determine_path_prefix(paths)
32 
33         for path, method, view in view_endpoints:
34             if not self.has_view_permissions(path, method, view):
35                 continue
36             link = view.schema.get_link(path, method, base_url=self.url)
37             # 添加下面這一行方便在views編寫過程中自定義參數.
38             link._fields += self.get_core_fields(view)
39 
40             subpath = path[len(prefix):]
41             keys = self.get_keys(subpath, method, view)
42 
43             # from rest_framework.schemas.generators import LinkNode, insert_into
44             insert_into(links, keys, link)
45 
46         return links
47 
48     # 從類中取出我們自定義的參數, 交給swagger 以生成接口文檔.
49     def get_core_fields(self, view):
50         return getattr(view, 'coreapi_fields', ())
51 
52 def DocParam(name="default", location="query", required=True, description=None, type="string", *args, **kwargs):
53     return coreapi.Field(name=name, location=location, required=required, description=description, type=type)
54 
55 
56 class ReturnJson(APIView):
61     coreapi_fields = (  #用於swagger doc顯示方法必須字符串
62         DocParam("name", description='test'),
63         DocParam("nalanxiao", required=False, description='rohero'),
64     )
65     def get(self, request, *args, **kwargs):
66         json_data = {'name': 'post', 'id': 0}
67         return Response(json_data)
68 
69     def post(self, request, *args, **kwargs):
70         json_data = {'name': 'post', 'id': 0}
71         return Response(json_data)

 

路由設置

  編輯urls.py

  

 1 from django.conf.urls import url
 8 from .views import SwaggerSchemaView, ReturnJson, StudentsApiView
 9 
10 urlpatterns = [
12     url(r'^api/$', ReturnJson.as_view(), name='api'),
13     url(r'^api/v1/$', StudentsApiView.as_view(), name='api_v1'),
17     url(r'^docs/', SwaggerSchemaView.as_view(), name='apiDocs'),
18 ]

效果展示:

  

github:

  https://github.com/Roherolxh/opstest

  覺得有幫助望給個小星星


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM