drf-分页,coreapi自动生成接口文档

news2024/12/23 18:13:02

目录

分页

 视图类继承ListAPIView的分页具体使用方法 

# 第一种PageNumberPagination页码分页

# 第二种LimitOffsetPagination偏移分页

# 第三种CursorPagination游标分页

视图类的使用

视图类继承APIView或GenericAPIView的分页使用

coreapi

如何写好接口文档

自动生成接口文档

1安装

2设置接口文档访问路径

3文档描述说明的位置

4访问接口文档网页

5注

6说明


分页

一般查所有时需要使用到分页,所以我们这写视图类继承的是ListAPIView,但可控性低,后续视项目需求而定

# drf内部自带三种分页组件,各有各的特点
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination

 视图类继承ListAPIView的分页具体使用方法 

ListAPIView继承了GenericAPIView,在GenericAPIView类中发现pagination_class = api_settings.DEFAULT_PAGINATION_CLASS即默认源码分页类配置是从drf的settings.py中找的,但drf的配置文件中'DEFAULT_PAGINATION_CLASS': None,表示初始分页类为None即未使用,所以在继承了ListAPIView的视图类中我们要通过pagination_class来配置分页类(组件)

>>drf内部自带了三种分页组件,一般我们都用第一个即PageNumberPagination。每个分页组件(类)中有些参数有默认配置但我们觉得它的配置不适用,所以我们应该写自己的分页类来继承它然后修改其中的属性,即为使用方法

注:属性应根据需求来改,以下提供的实际开发中不一定都要用到或都要改,仅为了介绍

# 第一种PageNumberPagination页码分页

class MyLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3 # 每页展示条数 默认为api_settings.PAGE_SIZE
    limit_query_param = 'limit' # 从标杆后拿几条的关键字 默认为limit
    offset_query_param = 'offset' # 标杆关键字 默认为offset 比如从1开始拿limit=那么多条但不包含offset=的数字
    max_limit = 5 # 每页最大限制 默认= None即无限制
    # http: //127.0.0.1:8000/paging_test/?offset=3&limit=4即表示从id=3开始拿但拿的是id为4,5,6,7的

# 第二种LimitOffsetPagination偏移分页

class MyLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3 # 每页展示条数 默认为api_settings.PAGE_SIZE
    limit_query_param = 'limit' # 从标杆后拿几条的关键字 默认为limit
    offset_query_param = 'offset' # 标杆关键字 默认为offset 比如从1开始拿limit=那么多条但不包含offset=的数字
    max_limit = 5 # 每页最大限制 默认= None即无限制
    # http: //127.0.0.1:8000/paging_test/?offset=3&limit=4即表示从id=3开始拿但拿的是id为4,5,6,7的

# 第三种CursorPagination游标分页

class MyCursorPagination(CursorPagination):
    cursor_query_param = 'cursor' # 游标查询关键字
    page_size = 3 # 每页条数 默认为api_settings.PAGE_SIZE
    ordering = '-id' # 按什么排序,这为id降序 默认为-created即创建时间的最近

"""
	这种一般适用于数据量极大的分页,效率高,因为这种不像第一第二种一样有分页码跳转
	而只有上下页按钮
	因为它按ordering排序了后才展示,通过cursor游标指示了位置来查询,cursor值就是一个类似位置索引的东西,比如下面就是在第一页点击了下一页后自动生成的url路由
	# http: //127.0.0.1:8000/paging_test/?cursor=cD01
	这种只支持上下页,不支持分页码跳转。分页码跳转的每次都需重新检索,效率没有这个高,但分页码的那种可跳转比较人性化(各有利弊)
"""

视图类的使用

class PublishListAPIViewTestPagination(ListAPIView):
    queryset = models.Publish.objects.all()
    serializer_class = PublishSerializers
    # 分页类配置pagination_class
    # pagination_class = MyPageNumberPagination    # 第一种
    # pagination_class = MyLimitOffsetPagination  # 第二种
    # pagination_class = MyCursorPagination           # 第三种

PS:三种分页方式的page_size可以在settings.py中全局配置比如'PAGE_SIZE':3,还是写在REST_FRAMEWORK={ }中

视图类继承APIViewGenericAPIView的分页使用

视图类基于APIView或GenericAPIView的分页我们也应会写,因为这种可控性高

具体使用就是研究那三种分页组件源码里面的方法调用即可

coreapi

如何写好接口文档

网上有很多接口文档规范示例,进公司后也有公司相应自己的规范

比如微博api:  https://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

自动生成接口文档

REST_FRAMEWORK可以自动帮我们生成接口文档,接口文档以网页的方式呈现

注意:自动接口文档只能生成视图类是继承APIView及其子类的视图!!!

1安装

使用coreapi:pip3 install coreapi

2设置接口文档访问路径

在总路由中添加接口文档访问路由配置

参数title是接口文档网站

from rest_framework.documentation import include_docs_urls
urlpatterns = [
	…
	path('docs/', include_docs_urls(title = '接口文档站点标题'))
]

3文档描述说明的位置

1、单一方法的视图,可直接使用类视图的文档字符串,如:
	class BookAPIView(ListAPIView):
		"""
		返回所有图书信息
		"""
2、包含多个方法的视图,在类视图的文档字符串中分方法定义,如:
	class BookAPIView(ListCreateAPIView):
		"""
		get:
		返回所有图书信息
		post:
		新建图书
		"""
3、对于视图集..ViewSet那种,仍在类的文档字符串中分开定义,但应用action名称区分,如
	class BookViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
		"""
		list:
		返回图书列表数据
		retrieve:
		返回图书详情数据
		latest:
		返回最新图书数据
		read:
		修改图书的阅读量
		"""

4访问接口文档网页

输入路由中配置的…/docs/路由即可看到自动生成的接口文档网页

5注

如果遇到以下报错:
	# AttributeError: 'AutoSchema' objects has no attribute 'get_link'
应该是版本问题,旧版默认用的rest_framework.schemas.openapi.AutoSchema
解决办法:在REST_FRAMEWORK中重配置
REST_FRAMEWORD = {
	'DEFAULT_SCHEMA_CLASS':'rest_framework.schemas.coreapi.AutoSchema'
}

6说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

众和策略可靠吗?A股构筑“市场底” 卫星互联网和5.5G逆势走强

可靠 周一A股三大指数低开低走,午后加快下探并创出今年以来新低,尾盘跌幅略有收窄。截至收盘,上证综指收于2939.29点,跌落1.47%;深证成指收于9425.98点,跌落1.51%;创业板指收于1864.91点&#…

AtCoder Beginner Contest 325 题解 A-E

目录 A - Takahashi sanB - World MeetingC - SensorsD - Printing MachineE - Our clients, please wait a moment A - Takahashi san 原题链接 题目描述 给你两个字符串,将第二个字符串改为san后与第一个字符串一起输出 public static void solve() throws IOExc…

spring懒加载

简介 Spring默认会在容器初始化的过程中,解析xml或注解,创建配置为单例的bean并保存到一个map中,这样的机制在bean比较少时问题不大,但一旦bean非常多时,spring需要在启动的过程中花费大量的时间来创建bean &#xff0…

Postman笔记

文章目录 1.安装2.简介和使用流程3 postman使用3.1 测试集与HTTP请求发送HTTP请求和分析响应数据 3.2 发送HTTP请求和分析响应数据3.3 Postman中请求体提交方式3.4 Postman使用之接口测试3.5 使用Postman新建一个mock服务3.6 请求数据的参数化3.7 断言与脚本导出 1.安装 官网地…

外汇天眼:过度交易是大忌,交易不是越多越好!

过度交易是交易中的大忌,因为交易并不是越多越好。为什么我们倾向于将交易失败归因于心态呢?这可能是因为我们认为一笔交易成功和失败的概率都是50%,从而让人们误以为他们具备盈利的能力。然而,如果我们具备盈利的能力&#xff0c…

【Java基础学习打卡21】流程控制

目录 前言一、流程控制的重要性二、流程控制结构1.顺序结构2.分支结构3.循环结构 三、顺序结构总结 前言 无论是哪种编程语言,都会提供流程控制结构:顺序结构、分支结构和循环结构。其实计算机之所以能够完成很多自动化的任务目标,因为它可以…

Flutter笔记:图片的 precacheImage 函数

Flutter笔记 图片的 precacheImage 函数 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134004572 【简…

执行 SQL 响应比较慢,你有哪些排查思路?

排查思路 如果执行 SQL 响应比较慢,我觉得可能有以下 4 个原因: 第 1 个原因:没有索引或者导致索引失效。 第 2 个原因:单表数据量数据过多,导致查询瓶颈第 3 个原因:网络原因或者机器负载过高。 第 4 个原…

JAVA-编程基础-11-02-文件流

Lison <dreamlison163.com>, v1.0.0, 2023.05.07 JAVA-编程基础-11-02-文件流 文章目录 JAVA-编程基础-11-02-文件流File 构造方法File 常用方法获取功能的方法**绝对路径和相对路径****判断功能的方法****创建、删除功能的方法**目录的遍历递归遍历 RandomAccessFile*…

LeetCode66——加一

LeetCode66——加一 题目描述&#xff1a; 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例…

904. Fruit Into Baskets

904. Fruit Into Baskets 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 904. Fruit Into Baskets https://leetcode.cn/problems/fruit-into-baskets/ 完成情况&#xff1a; 解题思路&#xff1a; 连续数组 -…

Unity BatchRendererGroup 在低端设备上也实现高帧率

在这篇文章中&#xff0c;我们描述了一个小型射击游戏样本&#xff0c;它可以动画和渲染几个交互式对象。许多演示只针对高端pc&#xff0c;但这里的目标是在使用GLES 3.0的廉价手机上实现高帧率。这个例子使用了BatchRendererGroup, Burst编译器和c#作业系统。它运行在Unity 2…

Git基础教程

一、Git简介 1、什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同&#…

你是否能应对每天数十亿次的IP访问?Top100查找技术解析

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术&#xff0c;热衷分享的IT小伙伴。今天&#xff0c;我要和大家聊一个程序员面试常见的问题&#xff1a;如何在每天海量IP访问的情况下&#xff0c;使用Java找出访问频率最高的Top 100&#xff1f…

【LeetCode刷题-数组】--344.反转字符串

344.反转字符串 使用双指针&#xff1a; class Solution {public void reverseString(char[] s) {int l 0,r s.length-1;while(l<r){char c s[l];s[l] s[r];s[r] c; l;r--;}} }

鸿蒙HarmonyOS应用开发:多码识别

华为HMS Core的扫码接口更适用于简单的个人使用。在商业环境&#xff0c;如货架、医用试管、图书馆书架等&#xff0c;常常遇到复杂的多码扫描需求&#xff0c;这时需要专业的扫码SDK。尽管当前市场上的主流商业SDK尚未支持鸿蒙HarmonyOS&#xff0c;但我们仍可以通过HTTP请求来…

「干货分享」如何使用CLion轻松解决C++开发者的7大痛点

CLion是一款专为开发C及C所设计的跨平台IDE&#xff0c;它是以IntelliJ为基础设计的&#xff0c;包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C&#xff0c;同时它还使用智能编辑器来提高代码质量、自动代码重构并且…

【UE】一个扫描效果(不使用后期处理体积)

效果 步骤 一、制作扫描效果 1. 在3dsmax中新建一个圆形 设置半径为50mm&#xff0c;勾选“自适应” 转换为可编辑多边形 导出 2. 打开虚幻编辑器&#xff0c;导入制作好的模型 3. 创建一个材质&#xff0c;这里命名为“M_Sphere” 打开“M_Sphere”&#xff0c;添加一个“V…

PCIe总线中Root Complex(RC)

在不同的处理器系统中&#xff0c;RC的实现有较大差异。PCIe总线规范并没有规定RC的实现细则。在有些处理器系统中&#xff0c;RC相当于PCIe主桥&#xff0c;也有的处理器系统也将PCIe主桥称为PCIe总线控制器。而在x86处理器系统中&#xff0c;RC除了包含PCIe总线控制器之外&am…

C语言:实现对单链表的反转 函数封装

需求&#xff1a; 实现对单链表的反转 代码实现&#xff1a; #include <stdio.h>typedef struct node{int data;struct node* next; }NODE;void PrintLink(NODE* phead) {NODE* p phead;while(p ! NULL){printf("%d ",p->data);p p->next;}printf(&…