[Django REST framework - 自动生成接口文档、分页]

自动生成接口文档

# 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发

# 公司里主流
-后端,使用world,md写,提到git上
-公司有接口平台,后端开发在接口平台录入(yapi,第三方),可以批量导入
-后端项目自动生成接口文档(不是特别美观或友好,有时候还需要配合上面两种)
-django的drf自动生成 coerapi,swagger:java,go,python

REST framework可以自动帮助我们生成接口文档。

接口文档以网页的方式呈现。

自动接口文档能生成的是继承自APIView及其子类的视图。

接口文档 coreapi,swagger

安装依赖:REST framewrok生成接口文档需要coreapi库的支持。
pip3 install coreapi 使用步骤:

1 在urls.py 路由中
from rest_framework.documentation import include_docs_urls

urlpatterns = [
path('doc/', include_docs_urls(title='图书管理项目接口文档')),
] 2 在settings.py 配置文件中
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
} 3 在view.py 视图类中对应的方法上加注释即可 4 如果是ModelViewSet
from app01 import models
from app01 import serializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import OrderingFilter

class BookView(ModelViewSet):
"""
list:
返回图书列表数据,通过Ordering字段排序

retrieve:
返回图书详情数据

latest:
返回最新的图书数据

read:
查询单个图书接口
"""
queryset = models.Book.objects.all()
serializer_class = serializer.BookModelSerializer
# 排序
filter_backends = [OrderingFilter,]
ordering_fields = ['price','name'] 5 字段描述,写在models.py的help_text上
from django.db import models

class Book(models.Model):
name = models.CharField(max_length=34,help_text='名字字段,字符串')
price = models.IntegerField(help_text='价格字段,整型')

6 浏览的地址(浏览器中)
http://127.0.0.1:8000/doc/ # 如果继承的是其它视图类,直接在对应的def函数下面写注释即可,例:
class BookView(APIView):
def get(self, request):
"""
所有图书信息
:param request:
:return:
"""
res = models.Book.objects.all()
ser = serializer.BookModelSerializer(instance=res, many=True)
return Response(ser.data)

分页Pagination

REST framework提供了分页的支持。可选分页器有三种

三种分页方式

1 三种分页方式
-基本分页:PageNumberPagination
page_size = 2 # 每页显示两条
page_query_param = 'page' #查询第几页的参数 ?page=3
max_page_size = 4 #每页最大显示多少条
page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=3&size=3 -偏移分页:LimitOffsetPagination
default_limit=2 #默认显示几条
limit_query_param='limit' # ?limit=3 表示取3条
offset_query_param = 'offset' #偏移 ?offset=5&limit=3 #从第5个位置开始,取3条数据
max_limit = 5 #最多显示5条 -游标分页:CursorPagination
cursor_query_param = 'cursor' # 查询的key值
page_size = 2 # # 每页显示两条
ordering = 'id' # 按id字段排序 2 如何使用
- APP下创建一个自定义py文件,eg:page.py
- 在文件中写一个自定义分页类,继承三个之一,并重写类属性
- 在视图类中配置
class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
queryset = models.Book.objects.all()
serializer_class = serializer.BookModelSerializer
# 配置使用的分页类
pagination_class = CustomNumberPagination - 局部使用
pagination_class = CustomNumberPagination - 全局使用,在配置文件中(以后所有视图的查询所有方法都用这个分页)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
}

基本分页:PageNumberPagination

也是用的最多的一种
创建一个py文件  # 任意名字  例如:page.py

1、在page.py 中自定义一个类,继承PageNumberPagination,并重写类属性

from rest_framework.pagination import PageNumberPagination   # 导入模块

class CustomNumberPagination(PageNumberPagination):  # 定义类名继承父类  重写属性

    page_size = 2  # 每页显示两条
page_query_param = 'page' #查询第几页的参数 ?page=3 max_page_size = 4 # 每页最大显示多少条
page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=2&size=3 2、在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.viewsets import ViewSetMixin
from app01.page import CustomNumberPagination # 导入自定义分页类 class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
queryset = models.Book.objects.all()
serializer_class = serializer.BookModelSerializer # 配置使用的分页类
pagination_class = CustomNumberPagination # 自己定义的类名 4、请求方式:(postman中测试)
http://127.0.0.1:8000/books/?page=3 # 查第3页
http://127.0.0.1:8000/books/?page=2&size=3 # 第2页显示3条 3、局部使用(视图类中)
pagination_class = CustomNumberPagination 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
}

偏移分页:LimitOffsetPagination

用的比较少的一种
1、在page.py 中自定义一个分页类,继承LimitOffsetPagination,并重写类属性

from rest_framework.pagination import LimitOffsetPagination  # 导入模块

class CustomLimitOffsetPagtion(LimitOffsetPagination):
default_limit=2 # 默认显示几条
limit_query_param='limit' # ?limit=3 表示取3条
offset_query_param = 'offset' #偏移 ?offset=5&limit=3 从第5个位置开始,取3条数据
max_limit = 5 #最多显示5条
# 手动写显示10条 也是显示5条 因为这已经写死了 2、在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.viewsets import ViewSetMixin
from app01.page import CustomLimitOffsetPagtion # 导入自定义偏移分页类 class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
queryset = models.Book.objects.all()
serializer_class = serializer.BookModelSerializer # 配置使用的分页类
pagination_class = CustomLimitOffsetPagtion 4、请求方式:(postman中测试)
http://127.0.0.1:8000/books/ # 默认从0开始取2条
http://127.0.0.1:8000/books/?limit=3&offset=2 # 取3条,从第2条开始 3、局部使用(视图类中)
pagination_class = CustomLimitOffsetPagtion 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'app01.page.CustomLimitOffsetPagtion'
}

游标分页:CursorPagination

基本不用,但针对千万级别的数据,为了降低数据库的压力,建议使用这种
1、在page.py 中自定义一个分页类,继承CursorPagination,并重写类属性
## 优点:速度最快,数据量越大,越有优势
## 缺点:只能前一页和后一页,不能直接跳到某一页 from rest_framework.pagination import CursorPagination class CustomCursorPagination(CursorPagination): # 查询速度最快
cursor_query_param = 'cursor' # 查询的key值
page_size = 2 # 每页显示两条
ordering = 'id' # 按id字段排序 必须写不然报错 # 下面两个基本不用可配可不配
page_size_query_param = 'size' # 通过这个参数决定每页显示多少条
max_page_size = 5 # 每页最大显示多少条 2、在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.viewsets import ViewSetMixin
from app01.page import CustomCursorPagination # 导入自定义游标分页类 class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
queryset = models.Book.objects.all()
serializer_class = serializer.BookModelSerializer
# 配置使用的分页类
pagination_class = CustomCursorPagination 4、请求方式:(postman中测试)
http://127.0.0.1:8000/books/?cursor=cD0y # 按照cursor给的key值查找下一页
http://127.0.0.1:8000/books/?cursor=cj0xJnA9Mw%3D%3D # 按照cursor给的key值查找上一页 3、局部使用(视图类中)
pagination_class = CustomCursorPagination 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'app01.page.CustomCursorPagination'
}

继承APIView实现三种分页方式

class BookViewALL(APIView):   # 继承APIView   需要自己写路由

    def get(self,request,*args,**kwargs):
book_list=Books.objects.all()
#实例化得到一个对象
pagination=CommonPageNumberPagination() # 只需要换此处的类就可以实现三种分页的效果 # 修改对象属性,我们不需要改
# pagination.page_query_param='page' #调用对象方法,传入要分页的数据,book_list,返回分页号的数据
book_list2=pagination.paginate_queryset(book_list,request,self) ser=BookSerializer(instance=book_list2,many=True) # 序列化器
# 自己写返回格式
res={'pre':pagination.get_previous_link(),'next':pagination.get_next_link(),'count':pagination.page.paginator.count,'data':ser.data} return Response(res) # 另一种返回方式 调用父类中的方法返回
return pagination.get_paginated_response(ser.data)

[Django REST framework - 自动生成接口文档、分页]的更多相关文章

  1. django自动生成接口文档

    我们在实际项目中,会需要将我们的一些接口的信息返回给前端,便于前后端的交互,在实际使用中,这种自动生成接口文档的模块很多,我主要是用REST framework自动生成接口文档,这个需要用到的是cor ...

  2. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)

    一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...

  3. Django rest_framework 自动生成接口文档

    自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1. 安装依赖 REST fram ...

  4. drf07 过滤 排序 分页 异常处理 自动生成接口文档

    4. 过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持. pip install django-filter 在配置文件sett ...

  5. drf频率源码、自动生成接口文档、JWT

    目录 一.drf频率源码分析 二.自动生成接口文档 1 安装依赖 2 设置接口文档访问路径 3 文档描述说明的定义位置 4 访问接口文档网页 三.JWT 1 JWT基本原理 1.1 header 1. ...

  6. day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档

    目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...

  7. rbac介绍、自动生成接口文档、jwt介绍与快速签发认证、jwt定制返回格式

    今日内容概要 RBAC 自动生成接口文档 jwt介绍与快速使用 jwt定制返回格式 jwt源码分析 内容详细 1.RBAC(重要) # RBAC 是基于角色的访问控制(Role-Based Acces ...

  8. .net core 使用swagger自动生成接口文档

     前言 swagger是一个api文档自动生动工具,还集成了在线调试. 可以为项目自动生成接口文档, 非常的方便快捷 Swashbuckle.AspNetCore 是一个开源项目,用于生成 ASP.N ...

  9. Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

随机推荐

  1. Linux 系统中如何查看日志 (常用命令) tail -f

    Linux 系统中如何查看日志 (常用命令)  tail -f 日志文件 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日 ...

  2. 利用S3fs在Amazon EC2 Linux实例上挂载S3存储桶

    一.准备!!! 1.使用拥有足够权限的IAM账号登录AWS控制台 2.创建S3存储桶,给存储桶命名如"my-bucket"(如果使用已有存储桶,本步骤可略过) 3.有该S3存储桶访 ...

  3. 说明位图,矢量图,像素,分辨率,PPI,DPI?

    说明位图,矢量图,像素,分辨率,PPI,DPI? 显示全部 关注者 28 被浏览 7,031 关注问题写回答 ​邀请回答 ​添加评论 ​分享 ​     2 个回答 默认排序 刘凯   21 人赞同了 ...

  4. ssh判断免密登陆

    ssh判断免密登陆 [root@jenkins ~]# vi /opt/release_code.sh #!/bin/bash . /etc/init.d/functions #echo $WORKS ...

  5. Django(38)mac安装redis

    安装redis 1.使用Homebrew安装Redis brew install redis 执行上述命令后出现以下内容,则成功安装 Download failed: https://mirrors. ...

  6. 第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松

    第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松 TCP 包头格式 我们先来看 TCP 头的格式.从这个图上可以看出,它比 UDP 复杂得多. 首先,源端口号和目标端口号是不可少的,这一点 ...

  7. NOIP模拟5 T2

    题面:求出满足以下条件的 n*m 的 01 矩阵个数:   (1)第 i 行第 1~li 列恰好有 1 个 1 (li+1到ri-1不能放1)   (2)第 i 行第 ri~m 列恰好有 1 个 1. ...

  8. TVM代码生成codegen

    TVM代码生成codegen 硬件后端提供程序(例如Intel,NVIDIA,ARM等),提供诸如cuBLAS或cuDNN之类的内核库以及许多常用的深度学习内核,或者提供框架例,如带有图形引擎的DNN ...

  9. AIoT开放平台及应用

    AIoT开放平台及应用 阿里AIoT开放平台,是阿里云IoT面向开发者的能力接入渠道,开发者可以在这里完成能力的申请.开通.部署.配置和集成开发等一些列工作.这些能力并不的独立交付,而是通过关联到行业 ...

  10. matrix_multiply代码解析

    matrix_multiply代码解析 关于matrix_multiply 程序执行代码里两个矩阵的乘法,并将相乘结果打印在屏幕上. 示例的主要目的是展现怎么实现一个自定义CPU计算任务. 参考:ht ...