• 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

      觉得有帮助望给个小星星

  • 相关阅读:
    bs4解析错误之 bs4 FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml.
    UI自动化之selenium元素定位不到问题的原因有哪几种?
    selenium定位:出现Message: element not interactable 元素不可交互的问题解决方案
    JS--编码规范
    JS操作数组-2
    JS-数组操作3
    JS操作数组
    用JS解决url地址中参数乱码的问题
    数组去重--ES5和ES6
    选择排序
  • 原文地址:https://www.cnblogs.com/rohero/p/10622280.html
Copyright © 2020-2023  润新知