djangorestframework开发出属于你自己的接口文档

经过两个星期的研究,终于做出来了。之前看了很多博客都是创建数据库去增加参数,但不是我想要的。因此就没有使用数据库去增加参数。

背景介绍:因为公司java人员开发出来一个自己的swagger界面,因为领导就说python是不是应该也可以开发出swagger界面呢?因此就把此任务交给刚入职3个月的员工、

一、环境搭建:

软件版本自己也试了好多版,终于弄了一个适合公司的版本。本次python版本是2.7.12。下面可能是你需要安装的软件包。请按顺序安装即可。

pytz==2019.1
django==1.11.22

simplejson==3.16.0
djangorestframework == 3.9.4

MarkupSafe == 1.1.1
Jinja2==2.10.1

coreschema==0.0.4
itypes==1.1.0
uritemplate==3.0.0

setuptools_scm==3.3.2
setuptools==40.8.0
pytest_runner==5.0
certifi==2019.6.16
urllib3==1.25.2
chrdet==3.0.3
requests==2.22.0

coreapi==2.3.3
openapi-codec==1.3.1
django-rest-swagger == 2.2.0

二、创建一个公共的swagger_schema.py

#-*- coding:UTF-8 -*-

import yaml
from urlparse import urljoin
from rest_framework.compat import coreapi
from rest_framework.schemas.generators import is_custom_action
from rest_framework.schemas.inspectors import AutoSchema

class CustomViewSchema(AutoSchema):
    def get_link(self, path, method, base_url):

        if hasattr(self.view, ‘action‘):
            action = self.view.action
        else:
            action = ‘‘

        if not is_custom_action(action):
            return super(CustomViewSchema, self).get_link(path, method, base_url)

        fields = self.get_path_fields(path, method)

        yaml_doc = None
        if self.view and self.view.__doc__:
            try:
                yaml_doc = yaml.load(self.view.__doc__)
            except:
                yaml_doc = None

        if yaml_doc and ‘desc‘ in yaml_doc:
            desc = yaml_doc.get(‘desc‘, ‘‘)
            _method_desc = desc
            params = yaml_doc.get(‘parameters‘, [])
            for i in params:
                _name = i.get(‘name‘)
                _desc = i.get(‘desc‘)
                _required = i.get(‘required‘, True)
                _type = i.get(‘type‘)
                _location = i.get(‘location‘, ‘query‘)
                f = coreapi.Field(
                    name=_name,
                    location=_location,
                    required=_required,
                    description=_desc,
                    type=_type
                )
                fields.append(f)
        else:
            _method_desc = self.view.__doc__ if self.view and self.view.__doc__ else ‘‘
            fields += self.get_serializer_fields(path, method)

        fields += self.get_pagination_fields(path, method)
        fields += self.get_filter_fields(path, method)

        te = []
        for field in fields:
            if field.location in ‘query‘:
                te.append(field.location)

        if fields and any(te):
            encoding = self.get_encoding(path, method)
        else:
            encoding = None

        if base_url and path.startswith(‘/‘):
            path = path[1:]

        return coreapi.Link(
            url=urljoin(base_url, path),
            encoding=encoding,
            action=method.lower(),
            fields=fields,
            description=_method_desc
        )

三、在自己的django项目中的APP修改views

from common.swagger_schema import CustomViewSchema
from rest_framework.decorators import api_view,schema

@api_view([‘GET‘]) #可以改为POST方法等
@schema(CustomViewSchema())
def getfiles(request):
    """
    desc: 获取某个路
    parameters:
    - name: spath
      desc: 远程的地址,
      type: string   #控制你输入的类型,比如字符串、数字等
      required: true  #控制参数是否为必选项
      location: query #可以修改为form等

    - name: ip
      desc: 远程ip
      type: string
      required: true
      location: query

    - name: port
      desc: 远程端口,
      type: string
      required: true
      location: query

    - name: username
      desc: 远程ip的用户
      type: string
      required: true
      location: query

    - name: password
      desc: 远程ip的密码
      type: string
      required: true
      location: query

    """
    spath = request.GET.get("spath",".")
    ip = request.GET.get("ip","")
    port = request.GET.get("port",22)
    username = request.GET.get("username","")
    password = request.GET.get("password","")
    return HttpResponse(‘get‘)

四、修改项目根目录下的setting

1、在  INSTALLED_APPS 中增加

rest_framework_swagger 和 rest_framework

五、修改项目根目录下的url
from rest_framework.schemas import get_schema_view
from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer
schema_view = get_schema_view(title=‘jobapp API‘,renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer])

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^app/‘, include(device_urls)),#这个是你自己创建的app
    url(r‘^api-auth/‘, include(‘rest_framework.urls‘, namespace=‘rest_framework‘)),
    url(r‘^api/‘, schema_view),
]

做到这一步,使用runsever应该就可以出现swagger界面。但是公司使用的uwsgi启动项目的,因此还要继续往下走。要使用uwsgi需要配置nginx的。

六、执行  python manage.py collectstatic 从setting中的INSTALLED_APPS 去收集static。会出现一个目录collected_static。里面有三个文件:admin  rest_framework  rest_framework_swagger

七、在项目根目录下的setting下修改
STATIC_URL = ‘/static/‘STATIC_ROOT = os.path.join(BASE_DIR, ‘collected_static‘)STATICFILES_DIRS = (    os.path.join(BASE_DIR, "static"),        

)八、在uwsgi.ini文件下增加
static-map = /static=/home/appuser/jobapp/collected_static
 


原文地址:https://www.cnblogs.com/qyk1995/p/11201869.html

时间: 2024-10-11 15:50:31

djangorestframework开发出属于你自己的接口文档的相关文章

开发底层硬件应该怎么编写接口文档

开发底层硬件应该怎么编写接口文档 这几天在做超市RFID结算系统的上位机程序编写,用的是VB.NET.底层用的是别人开发好的SDK,为什么要写这一篇文章呢?最近因为手头设备的功能限制,我就在网上找其他的公司的RFID射频卡读写器,由于我是做上层开发,所以需要设备供应商提供底层SDK二次开发包,找了好多设备提供商 ,也跟他们索取各自提供的SDK,但总的来说,我还是觉得最先用的这个设备的厂家提供的SDK是最详细的,现在简单说明如下: 一.函数说明: 1.目录结构清晰: 2.函数返回值,参数用表格说明

附录1:接口文档参考模板

https://www.w3cschool.cn/phalapi/5fhi1tth.html 附录1:接口文档参考模板 由 chanzonghuang 创建,最后一次修改 2016-11-20 虽然提供了在线接口参数的查看,但在和客户端对接过程中,我们作为后台开发,还是需要人工提供接口文档给客户端的,这里提供一个接口文档编写的模板,以供参考,并且以我们熟悉的?service=User.GetBaseInfo为例说明如何编写高效的文档. 温馨提示:斜体字表示是注释说明. 功能说明 对接口功能的简单

生成项目依赖包文档、自动生成接口文档

一. pipreqs模块生成依赖包文档 项目中通常会安装很多模块,为了移植性更好,我们可以使用pipreqs模块生成依赖包文档. 1.1 安装pipreqs模块 pip install pipreqs 1.2 生成对应项目的路径 切换至项目根目录,或者是给一个项目的路径: D:\youkutest\luffyapi>pipreqs ./ --encoding=utf8 上面项目名为luffyapi,后面加--encoding=utf8是防止因为编码问题报错,建议加上. 1.3 新环境中安装依赖包

Api接口文档管理工具,你知道哪些呢?

上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的这个年代,Api接口文档管理工具越来越显得重要.完整的Api接口文档能大大提升前后端开发协作的效率. image 目前市场有哪些比较优秀的接口文档管理工具呢?Swagger Api接口文档工具到底如何,我大致汇总一下吧! 一.Swagger 说到Swagger,他确实是为开发者发明的一款神器,他可以

app后端开发二:API接口文档工具

悲伤的历史 在进行app后端开发过程中,后端会提供出来很多的api接口供前端开发使用,为了让前端开发人员顺利使用,我们会写好一份文档,告诉他们这个接口你该用 GET 还是 POST 来访问,同时访问的时候该给我传递一些什么参数,以及正确的时候我会返回什么给你,已经返回的数据样式以及字段解释等等这些事情,我们都需要在文档中写好写清楚. 在 app后端开发一:基于swagger-ui构建api接口文档工具 这篇博客中,我写了 swagger-ui 的好处以及优势.但是在使用过程中,发现不够给力.我想

开发接口文档--本接口文档是读取控制器方法上的注释自动生成的

本文档是参考网上的然后根据公司需要对代码进行了抽取和优化(主要是加了标题栏和对输出进行了格式化输出,更换呢了页面渲染方式(改为直接使用php进行渲染,原来的是使用了模板引擎),可读性较好),配置简单,读取方便,和项目耦合性较小,只需要将api_view这个文件夹放到和项目同级就可以使用,接口文档只有100多k大小 1.配置控制器 按照上图格式写接口方法注释(主是在控制器上面和方法上) 2.将接口文档放置在和项目同级 注:上面3个事项目,最下面的是接口文档 3.配置接口文档配置文件 api_vie

如何利用apidoc来写接口文档

在开发后台接口的过程中,肯定要提供一份api接口文档给终端.一直用word写,太丑了..怎么才能做出一份漂亮的api文档呢?找了好久发现了今天的主角-apidoc. 官网地址:http://apidocjs.com 开放API已经成为当下主流平台的一个要素,特别对于社交.电商类的平台开放API更成为了竞争力的一种.开放API文档的完整性.可阅读性往往影响着接入方是否能顺利地.快速地接入到平台,一份好的.统一的API文档也是开放平台不可或缺的要素. apidoc是通过源码中的注释来生成API文档,

用Swagger生成接口文档

Swagger简介 在系统设计的时候,各个应用之间往往是通过接口进行交互的.因此接口的定义在整个团队中就变得尤为重要.我们可以把接口的规范用接口描述语言进行描述,然后Swagger可以根据我们定义的接口规范生成对应的接口文档.它生成的接口文档提供了接口测试功能.我们只需要填上对应的参数,然后点击调用,就可以完成一次接口测试,非常方便.就像下图展示的那样. 不仅如此,Swagger还能够根据接口规范自动生成对应的接口代码!比如Java客户端代码.Java服务端代码等.这个东西减少了接口规范的沟通成

接口测试入门,接口文档的分析

1.首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的.具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开发进行确认. 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面. a.具体的一个业务实现的逻辑: b.请求的一个方式  例如:请求方式为(  http )                     http://127.0.0.1:8881/gasStation/process (http接口)   c.反馈的一个方式,一般情况下http的反