Django一分钟:DRF生成OpenAPI接口文档

news2024/12/23 9:38:43

DRF项目中如果想要自动生成API文档我们可以借助drf-spectacular这个库,drf-spectacular非常强大,它可以自动从DRF中提取信息,自动生成API文档,配置简单开箱即用,并且它对很多常用的第三方如:SimpleJWTdjango-filter等做了适配。

下面的示例中我们将创建一个一些接口,由django-filter实现过滤功能,并且使用drf-spectacular创建接口文档。

1. 下载依赖

pip install drf-spectacular[sidecar]
pip install django-filter

2. 配置settings.py

# APP配置
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "api.apps.BlogConfig",# 你的app

    'rest_framework',
    'drf_spectacular',
    'drf_spectacular_sidecar',
]

# DRF配置
REST_FRAMEWORK = {
    ...
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
    ...
}

# SPECTACULAR配置
SPECTACULAR_SETTINGS = {
    'TITLE': 'Your Project API',
    'DESCRIPTION': 'Your project description',
    'VERSION': '1.0.0',
    'SERVE_INCLUDE_SCHEMA': False,
}

3. 创建模型

from django.db import models
from django_filters import rest_framework as filters
from rest_framework import serializers


class Order(models.Model):
    name = models.CharField(max_length=100)


class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    create_at = models.DateTimeField(auto_now_add=True)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)

4. 创建过滤器

class ProductFilter(filters.FilterSet):
    class Meta:
        model = Product
        fields = {
            'price': ['lt', 'gt'],
            'create_at': ['lt', 'gt'],
            'order__name': ['exact'],
        }

5. 创建序列化器

class OrderSer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

    def create(self, validated_data):
        return Order.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.save()
        return instance


class ProductReadSer(serializers.ModelSerializer):
    order = OrderSer(read_only=True)

    class Meta:
        model = Product
        fields = '__all__'


class ProductCreateSer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['price', 'order']

    def create(self, validated_data):
        return Product.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.price = validated_data.get('price', instance.price)
        instance.order = validated_data.get('order', instance.order)
        instance.save()
        return instance

6. 创建路由

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
from api.views import OrderViewSet, ProductReadViewSet, ProductCreateViewSet
router = DefaultRouter()
router.register(r'orders', OrderViewSet)
router.register(r'products/read', ProductReadViewSet, basename='product-read')
router.register(r'products/create', ProductCreateViewSet, basename='product-create')

# 后台管理
urlpatterns = [
    path('admin/', admin.site.urls),
]

# API接口
urlpatterns += [
    path('api/', include(router.urls)),
]

# API文档
urlpatterns += [
    path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
    path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
    path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
]

7. 数据库迁移

python manage.py makemigrations XXX
python manage.py migrate

8. 使用示例

启动项目打开我们配置的文档地址可以看到注册到路由中的接口其文档已经被自动创建好了。
在这里插入图片描述
配置了过滤器的接口也在文档中有所反映:
在这里插入图片描述

相关参考文档地址

  • drf-spectacular
  • django-filter

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

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

相关文章

专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法

Mirillis Action!(暗神屏幕录制软件)专业高清屏幕录像软件,被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件,拥有三大硬件加速技术,支持以超高清视频画质录制桌面和实况直播,超清视频画质&…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像,作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是:Stream EDitor(流编辑器) Linux sed 命令是利用脚本来处理文本文件,sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

Dev-C++ 安装与使用(dev c++官网)(已解决)

1.Dev-C的安装 ①打开Dev-C的官网(https://sourceforge.net/projects/orwelldevcpp/ );点击Download(下载),等待5秒后开始下载。 ②点开下载好的EXE文件,等待加载完成(如图)。 右键,以管理员身份 运行安装包。 选择English(英语),…

近年来自动驾驶行业就业与企业需求情况

自动驾驶行业在近年来持续发展,就业情况和企业需求呈现出多样化和复杂化的趋势。 以下是基于我搜索到的资料对自动驾驶行业最新就业情况和企业需求的详细分析: 自动驾驶行业对高端技术人才的需求非常旺盛,尤其是架构工程师、算法工程师等岗…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据,数据类型转换不会改变原数据,是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

判断推理(3)

A正好说反了 C没说唐朝是否使用陶片 题干说的是有时会造成伤害,但是没有说服用了维生素和矿物质一定会带来伤害,所以A选项不能进行削弱 D是对比实验:增加反向论据。通过对儿童的调查发现,不服用的儿童营养缺乏症的发病率高,通过对…

Windows无需管理员权限,命令轻松修改IP和DNS

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…(每天更新不间断,福利…

QML: FolderListModel(访问本地系统文件)

目录 一.性质 1.导入模块 2.基本属性 3.数据模型接口 4.方法 二.使用 1.引入 2.调用 三.效果 四.代码 一.性质 FolderListModel是QT提供的一个可以访问本地系统文件夹内容的组件,它能够将获取到的信息提供给其他组件使用。 1.导入模块 在使用FolderLis…

java动态生成类javassist

简述 Javassist(Java Programming Assistant)是一个 操作Java 字节码的类库,主要用于在运行时或编译时修改 Java 类的字节码。 它提供了相对简单的 API,让开发者可以动态地创建、修改和加载 Java 类 , 从而实现诸如动态代理、AOP…

用友Yonbuilder 平台使用教程序

用友Yonbuilder 平台使用教程 目录概述需求: 设计思路实现思路分析 免费下载参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

opencv学习:利用帧差法实现对视频移动物体的识别、帧差法的优缺点及完整代码实现

基本概念 帧差法是视频处理和计算机视觉领域中用于移动检测的一种简单而有效的方法。它主要依赖于连续视频帧之间的像素差异来识别场景中的移动对象。 帧差法: 定义:帧差法通过比较连续的视频帧之间的差异来检测移动对象。基本思想是移动对象会在连续的…

基于unbantu操作系统下的docker安装全教程

目录 检查docker安装环境 1.检查服务器的CPU和操作系统版本是否为docker支持的版本。 2.卸载已有的docker 安装docker 1.创建目录 2.下载GPG秘钥 3.添加Docker的APT源 4.更新APT包索引并安装Docker 5.运行docker并配置镜像加速器 安装docker-compose 使用apt命令下载…

MAC中滚轮方向和Windows相反的解决方案

MACOS外接鼠标滚轮方向与Windows相反 MAC中滚轮方向和Windows相反,很难受 在使用MACOS操作系统时,滚轮的方向和Windows系统中的相反,这一点常常让人感到不适应和困惑。当第一次切换到MAC电脑时,许多用户会发现他们的习惯滚动操作…

LORD-GX5-45 ROS安装

1、驱动安装 https://github.com/LORD-MicroStrain/MSCL 上述下载 x64:C&#xff0c;在下载完的deb文件下执行 sudo dpkg -i <PACKAGE_NAME>.deb #install MSCL sudo apt install -f #install dependencies2、源码安装 #新建工作空间 mkdir -p ~…

Windows系统编程(三)线程并发

进程与线程 进程&#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说&#xff0c;进程仅仅是一个数据结构&#xff0c;并不会真实的执行代码 线程&#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程&#xff0c;它会真实的执行代码。每…

环形链表(c语言)

1.//环形链表 //输入&#xff1a;head [3,2,0,-4], pos 1 //输出&#xff1a;true //解释&#xff1a;链表中有一个环&#xff0c;其尾部连接到第二个节点。 //输入&#xff1a;head [1, 2], pos 0 //输出&#xff1a;true //解释&#xff1a;链表中有一个环&#xff0c;其…

保留字作为数据表字段导致的问题!!!

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;乡下小哥编程。回复 Java全套视频教程 或 前端全套视频教…

考拉悠然携手中国系统打造城市智能中枢,让城市更聪明更智慧

在21世纪的科技浪潮中&#xff0c;智慧城市建设已成为推动城市现代化进程的重要引擎。随着人工智能技术的飞速发展&#xff0c;AI正以前所未有的速度融入智慧城市管理的每一个角落&#xff0c;从交通出行到公共安全&#xff0c;从环境保护到城市管理&#xff0c;无一不彰显着智…