首页 > 其他分享 >接口文档

接口文档

时间:2023-05-11 17:14:48浏览次数:32  
标签:models rest 文档 接口 import class

目录

一、接口文档

在前后端分离的web应用模式下,我们编写后端只需要编写接口,前端根据我们的接口编写各式各样的前端界面。

作为后端,我们十分清除自己编写的各种接口的作用,以及接口的要求,但是前端人员并不知道,因此我们需要编写接口文档,让前端可以明白需要往什么接口发送请求,请求需要符合的要求。

举例:登陆接口的要求

-作为后端来讲,我们很清楚,比如登录接口  /api/v1/login/---->post---->变量名称username,password 编码方式json----》返回的格式  {code:100,msg:登录成功}

在公司里面写API接口文档的方式有三种:

# 接口文档如何编写
	-1 使用word,md 编写接口文档
    -2 使用第三方平台(比如showdoc),编写我们的接口文档(非常多)---》收费
    	-https://www.showdoc.com.cn/item/index
    -3 公司自己使用第三方开源的搭建的---》Yapi ---》你如果想自己搭建(去看教程)
    	-https://zhuanlan.zhihu.com/p/366025001 
            
    -4 使用drf编写的接口,可以自动生成接口文档
    	-swagger---》drf-yasg---》官方推荐使用
        -coreapi----》咱们讲的是这个

接口文档,需要有的东西

-描述
-地址
-请求方式
-请求编码格式
-请求数据详解(必填,类型)
-返回格式案例
-返回数据字段解释
-错误码

使用coreapi自动生成接口文档步骤

  • 步骤一:安装coreapi模块

pycharm下载或是

pip install coreapi
  • 步骤二:配置路由

在总路由中添加接口文档路径。

文档路由对应的视图配置为rest_framework.documentation.include_docs_urls

参数title为接口文档网站的标题。

from rest_framework.documentation import include_docs_urls

urlpatterns = [
    ...
    path('docs/', include_docs_urls(title='站点页面标题'))
]
  • 步骤三:在视图类或视图集的内部写上注释

我们可以视图类或是视图类中的类方法内加注释,让他接口文档中进行显示,写在类中的注释会出现在接口文档的每一个方法内,写在类方法内的注释会出现在接口文档中该方法所在的位置

如果我们想要修改接口文档中的序列化类或是模型表中的字段的名称或限制条件,可以在字段中进行修改,接口文档中也会显示出来(help_text:给字段配置注释,required:不能为空约束)。

  • 步骤四:配置文件中添加配置信息
    	REST_FRAMEWORK = {
     		'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',

    	}
  • 步骤五:访问地址,查看接口文档
http://127.0.0.1:8000/docs

代码

urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urls
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView, 'books')


urlpatterns = [
    path('admin/', admin.site.urls),
    # 这是接口文档的路由
    path('docs/', include_docs_urls(title='zzh的项目接口文件')),
    # 这是视图类自动匹配的路由
    path('api/v1/', include(router.urls)),
]

models.py

两个def方法在数据库迁移的时候要先注释掉

from django.db import models


# 图书跟作者:多对多,需要建立中间表,但是我们可以通过ManyToManyField自动生成,写在哪里都行
# 图书跟出版社:一对多,一个出版社,出版多本书,关联字段写在多的一方,写在Book
class Book(models.Model):
    name = models.CharField(max_length=32, default='xx', help_text='图书名字')
    price = models.IntegerField()

    publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)  # 留住,还有很多
    authors = models.ManyToManyField(to='Author')

    def publish_detail(self):
        return {'name': self.publish.name, 'addr': self.publish.addr}

    def author_list(self):
        l = []
        for author in self.authors.all():
            l.append({'name': author.name, 'phone': author.phone})
        return l


class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)


class Author(models.Model):
    name = models.CharField(max_length=32)
    phone = models.CharField(max_length=11)


class User(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    user_type = models.IntegerField(choices=((1, '超级管理员'), (2, '普通用户'), (3, '2B用户')), default=2)


class UserToken(models.Model):  # 跟User是一对一
    token = models.CharField(max_length=32)
    user = models.OneToOneField(to='User', on_delete=models.CASCADE, null=True)
    # user :反向,表名小写,所有有user字段

serializer.py

这是序列化类,收发请求会用到所以要写

from rest_framework import serializers
from .models import Book, Author, Publish
from rest_framework.exceptions import ValidationError


class BookSerializer(serializers.ModelSerializer):
    # 跟表有关联
    class Meta:
        model = Book
        fields = ['id', 'name', 'price', 'publish_detail', 'author_list', 'publish', 'authors']
        extra_kwargs = {
            'id': {'help_text': 'id号'},
            'name': {'max_length': 8},
            'publish_detail': {'read_only': True},
            'author_list': {'read_only': True},
            'publish': {'write_only': True},
            'authors': {'write_only': True},
        }

settings.py

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
'我们要在浏览器中显示接口文档还需要注册drfapp'
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'rest_framework',
]

views.py

from django.shortcuts import render
from rest_framework.generics import ListAPIView
from .models import Book
from .serializer import BookSerializer
from rest_framework.viewsets import ModelViewSet

# Create your views here.
'这里的注释必须写在代码的最上方,否则可能不会显示'
class BookView(ModelViewSet):
    """
    你是猪
    """
    queryset = Book.objects.all()
    serializer_class = BookSerializer

两点说明

1) 视图集ViewSet中的retrieve名称,在接口文档网站中叫做read

2)参数的Description需要在模型类或序列化器类的字段中以help_text选项定义,如:

class Student(models.Model):
    ...
    age = models.IntegerField(default=0, verbose_name='年龄', help_text='年龄')
    ...

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = "__all__"
        extra_kwargs = {
            'age': {
                'required': True,
                'help_text': '年龄'
            }
        }


标签:models,rest,文档,接口,import,class
From: https://www.cnblogs.com/zhihuanzzh/p/17391628.html

相关文章

  • SpringBoot 接口并发限制(Semaphore)
    可以使用JMeter辅助测试 https://blog.csdn.net/weixin_45014379/article/details/124190381@RestController@RequestMapping({"/Test"})publicclasstest{Loggerlogger=LoggerFactory.getLogger(this.getClass());//使用Semaphore并发限制3个超过阻......
  • 接口测试:Eolink Apikit 和 Postman 哪个更好用?
    很多做服务端开发的同学,应该基本都用过Postman来测试接口,虽然Postman能支撑日常工作,但是总感觉还是少了点什么,比如需要Swagger来维护接口文档,需要人肉发送接口变更通知。如今,国产的接口管理工具做得越来越好了,比如,EolinkApikit,一站式API协作平台。EolinkApikit和Post......
  • 共筑数字化未来,金山办公携手华为云完成文档中心和GaussDB适配
    摘要:金山办公携手华为云完成金山办公自主研发的“WPS文档中心系统”与华为云GaussDB相互兼容性测试认证,并获得华为云授予的《技术认证书》。本文分享自华为云社区《共筑数字化未来金山办公携手华为云完成文档中心和GaussDB适配》,作者:GaussDB数据库。近日,金山办公携手华为云完......
  • 安装-唯一客服系统文档中心
    环境要求Mysql>=5.6IIS/Apache/Nginx(只推荐nginx)宝塔一键部署前往【软件商店】=>【一键部署】=>【导入项目】客服项目本身不需要PHP环境,因此PHP版本那里,随意根据自己环境写上就可以 导入完成以后,点击一键部署,填入域名、项目目录、数据库信息即可完成安装 宝塔手......
  • 使用条款-唯一客服系统文档中心
    唯一客服(uniqchat、gofly)、私有化部署版本、对公商务全源码版本、开源版本均受到国家法律和国际公约保护。使用者:无论个人或组织、盈利与否、用途如何(包括以学习和研究为目的),均需仔细阅读本协议,在理解、同意、并遵守本协议的全部条款后,方可开始使用唯一客服软件,若您一旦使用唯一......
  • 序言-唯一客服系统文档中心
    项目简介唯一客服系统(又名UniqChat、gofly)是基于GolangGin框架和element-ui的在线客服咨询系统。创立于2019年初,是一款连接企业与客户的即时通讯项目,遵循快速、简洁的开发原则,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化独立客服功能。......
  • 文档
    1.技术栈后端Springboot,mybatis-plus前端html,css,javaScript(ajax,),Echarts腾讯地图可视化jsThymeleaf,bootstrap2.模块登录前端通过输入管理员的账号和密码,调用ajax发送一个http请求,调用后端Controller方法,然后通过后端调用mybatis-plus,查询账号及对应密码如果成功就保......
  • 文档·
    1.技术栈后端Springboot,mybatis-plus前端html,css,javaScript(ajax,),Echarts腾讯地图可视化jsThymeleaf,bootstrap2.模块登录前端通过输入管理员的账号和密码,调用ajax发送一个http请求,调用后端Controller方法,然后通过后端调用mybatis-plus,查询账号及对应密码如果成功就保......
  • springboot集成springSwagger生成接口文档
    1.首先引入pom.xml依赖<!--SwaggerAPI文档--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version><exclusions><exclus......
  • Layui 2.8.0 正式发布,官网全新文档站朴实归来
    前言两年前Layui官网宣布了下线声明,说实话当时内心确实感慨万千毕竟这个免费为我们后端程序员提供的一个前端快熟开发框架的官网就这样下线了确实十分的惋惜,但是庆幸的是官网的下线,只是单纯一个网站自身生命周期的结束,它并不意味着Layui这样一个开源项目的停更,Layui仍然......