Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >django rest_framework 自定义文档

django rest_framework 自定义文档

作者头像
编程黑洞
发布于 2023-03-06 11:18:51
发布于 2023-03-06 11:18:51
65100
代码可运行
举报
文章被收录于专栏:编程黑洞编程黑洞
运行总次数:0
代码可运行

# 简介

django rest_framework 自动生成文档的功能,能够很好的给前端提供帮助,在文档中可以看到api的参数和其提供的功能信息,并且还能够在上面直接测试api接口。

官网 (opens new window)

# 配置

urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.documentation import include_docs_urls

urlpatterns = [
    ...
    url(r'^docs/', include_docs_urls(title='My API title'))]

即可使用该url对文档的访问

# 自定义文档

虽然可以自动生成文档,但是不是很完善,所以需要自定义写文档。

# schema

通过改写AutoSchema来完成自定义文档。

# 方法一

get_linkAutoSchema中的函数. 重写get_link函数,对文档中的每个字段的说明进行改写。

集成AutoSchema,在__init__初始化params_desc_dict参数,该参数包含文档中字段对应的注释,然后在get_link对该参数进行解析,并替换字段注释.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class BaseSchema(AutoSchema):
    """
    自动生成的文档会有缺失,或者是因为可读性比较差。所以需要对文档中的字段进行自定义注解。
    该类是通用的对文档中的get、post、put、delete、patch进行注释。
    是在已有字段的基础上修改注释.
    
    `get`是对get中的字段进行注解说明。
    `other``post``put``delete``patch`
    
    例子:
        {
            "get": {
                "字段名": "对该字段进行注释"
            },
            "post": {
                "字段名": "对该字段进行注释"
            }
        }

    """
    def __init__(self, manual_fields=None, params_desc_dict=None):
        self.params_desc_dict = {
            "get": {
                "page": "当前页码",
                "page_size": "每一页显示的行数. 默认传 10条"
            },
            "other": {

            }
        }

        if params_desc_dict:
            if 'get' in params_desc_dict:
                self.params_desc_dict['get'].update(params_desc_dict['get'])

            if 'other' in params_desc_dict:
                self.params_desc_dict['other'].update(params_desc_dict['other'])

        super(BaseSchema, self).__init__(manual_fields)

    def get_link(self, path, method, base_url):
        link = super(BaseSchema, self).get_link(path, method, base_url)

        fields = []

        params_method = 'get' if method.lower() == 'get' else 'other'

        for field in link.fields:
            if field.name in self.params_desc_dict[params_method].keys():
                field = field._replace(
                    schema=coreschema.String(description=self.params_desc_dict[params_method][field.name]))

            fields.append(field)

        return coreapi.Link(
            url=link.url,
            action=link.action,
            encoding=link.encoding,
            fields=fields,
            description=link.description
        )

periodictaskSchema = BaseSchema(params_desc_dict={
    'other': {
        "crontab": "定时crontab. json。 包含的字段有: minute, hour, day_of_week, day_of_month, month_of_year",
        "name": "该定时任务名称",
        "task": "模板任务名",
        "args": "传递给任务模板参数. 数组",
        "kwargs": "传递给任务模板参数. json字符串",
        "queue": "将任务放在哪个队列中.",
        "enabled": "是否开启该任务. True or False. 默认为True",
        "description": "定时任务说明"
    }
})

在view中绑定自定义的schema

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class PeriodictasksViewSet(viewsets.ModelViewSet):
    queryset = PeriodicTask.objects.all()
    serializer_class = PeriodictaskSerializer
    schema = periodictaskSchema

# 方法二

如果只是普通的APIView的话,直接在AutoSchema中添加字段即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
databaseInfoSchema = AutoSchema(manual_fields=[
    coreapi.Field(name="db", required=True, location="query",
                  schema=coreschema.String(description="数据库host, normal或者sub")),
    coreapi.Field(name="database", location="query", schema=coreschema.String(description="数据库")),
    coreapi.Field(name="table", required=True, location="query", schema=coreschema.String(description="数据库表"))
])

绑定自定义schema

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DataBaseInfo(APIView):
    schema = databaseInfoSchema

    def get(self, request):
        pass

# location

location

描述

query

查询. list

form

表单提交. post

path

在url中的,/oozieJob/{id}/. read

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DRF Swagger自定义的action文档参数实现
这里不讲 DRF(django rest framework) 和 DRS(django rest swagger) 如何结合使用, 在以上两个项目文档中都有相关文档。
用户1416054
2018/08/02
3.7K1
DRF Swagger自定义的action文档参数实现
让 API 自动生成文档
程序员最苦恼的事情莫过于写文档。由于业务口径频繁变更,因此很多接口也会频繁变更,频繁变更导致文档的维护是一件相当费时的事情,当优先级更高的事情袭来,更新文档反到成了次要工作,久而久之,文档就算有,也不是最新的,有些接口,干脆文档也不写了,口口相传了事。
somenzz
2020/11/25
1.7K0
让 API 自动生成文档
Django Rest Framework 自动生成接口文档的方法
from django.contrib import admin from django.urls import include, path from rest_framework.documentation import include_docs_urls urlpatterns = [     path('admin/', admin.site.urls),     path('', include('project.urls')),     path('docs/', include_docs_urls(title='说明文档')), ]
保持热爱奔赴山海
2020/05/25
3.1K1
Django Rest Framework 自动生成接口文档的方法
Django REST framework+Vue 打造生鲜超市(四)
五、商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django rest framework的view 利用Django的view实现返回json数据 # goods/view_base.py from django.views.generic import View from goods.models import Goods class GoodsListView(Vie
zhang_derek
2018/04/11
4.9K0
Django REST framework+Vue 打造生鲜超市(四)
接口文档如何去写?
我们知道前后端分离,前端一般按后端写好的接口去开发,那么就需要我们明细后端接口数据等,需要写接口文档,前端按照接口文档去开发
HammerZe
2022/05/09
1.4K0
接口文档如何去写?
Vue+Django2.0 REST framework 打造前后端分离的生鲜电商项目(五)商品列表页
一、Django2.0的view实现商品列表页 算是对以前django知识的一个回顾,方便跟下面的drf(Django REST framework)实现商品列表页作对比 1.在apps/goods下新建views_base.py文件 1 import json 2 from django.views.generic.base import View 3 4 from .models import Goods 5 6 7 class GoodsListView(View): 8
玩蛇的胖纸
2018/06/08
4.8K0
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/27
5.4K0
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
从入门到"精通"Django REST Framework-(四)
APIView 是 Django REST Framework (DRF) 中提供的基础视图类,继承自 Django 的 View 类,但针对 RESTful API 进行了扩展。它支持以下功能:
rxg456
2025/02/27
1070
从入门到"精通"Django REST Framework-(四)
你可能不知道的 Django Rest Framework 的两个新特性
前端、甚至大前端发展如此火爆的 2017 年(我相信 2018 年一样)刚过去,像 MVC 架构那样直接使用后端模板渲染前端页面的方式已经不被推崇了(当然有些场景下还是蛮适合的),交互的体验和难度都已经和 MVVM 架构的 Front-End 相差了 108000 Km -- 用户体验差,开发难度还高。现在是 VueJS / ReactJS / AngularJS 与使用 JSON 格式的 Back-End 交换数据的世界。作为一个 Django 使用者,DRF(Django Rest Framework,
临书
2018/03/07
1.3K0
你可能不知道的 Django Rest Framework 的两个新特性
Django REST framework+Vue 打造生鲜超市(五) 六、商品类别数据展示
六、商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级   一种是某一类的分类以及商品详细信息:  开始写商品分类的接口 (2)序列化 给分类添加三
zhang_derek
2018/04/13
2.4K0
Django REST framework+Vue 打造生鲜超市(五)
		六、商品类别数据展示
rest_framework自定义认证
rest_framework自定义认证,简单两步即可实现 下面是所有views urls models 的代码 #views.py from django.shortcuts import render from django.http import HttpResponse,JsonResponse from rest_framework.views import APIView from rest_framework.request import Request from rest_framewor
kirin
2020/06/11
3230
【DRF】快速入门,使用DjangoRestFrameWork自动生成Restful风格的增删改查代码和接口文档!
DRF快速入门⭐都快2023年了还有人自己写增删改查代码?!?我不允许还不会有人用DRF!⭐今天教大家使用 Django Rest FrameWork 自动生成Restful风格的增删改查代码和接口文档!⭐参考文章:首页 - Django REST 框架 (django-rest-framework.org)(官方文档)注意:Django Rest FrameWork 是在Django框架下使用以下内容需要先创建一个Django项目什么是Restful风格:RESTful API 一种流行的 API 设计风
LonelySnowman
2022/12/07
1.6K0
drf的接口文档生成与管理
在项目开发中,例如web项目的前后端分离开发,需要由前后端相关人员共同定义接口,编写接口文档。之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。一个好的接口文档能够帮助我们快速上手这类项目、便于阅读已有代码、对接接口自动化测试等等
仙人技术
2021/04/13
4.8K0
drf的接口文档生成与管理
django接口文档自动生成
django-rest_framework接口文档自动生成 只针对用到序列化和返序列化 一般还是用第三方yipi 一.安装依赖 pip3 install coreapi 二.设置 setting.py INSTALLED_APPS = [ ..... 'rest_framework', ] ..... REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema', } 三.路由设置 from djan
小小咸鱼YwY
2020/06/19
6950
django接口文档自动生成
django-rest-framework登陆认证
# -*- coding: utf-8 -*- __author__ = 'YongCong Wu' # @Time : 2018/10/23 15:05 # @Email : : 1922878025@qq.com from rest_framework import exceptions from app import models class FirstAuthtication(object): def authenticate(self, request):
Wyc
2018/11/09
1.3K0
测试开发进阶(三十)
生成API文档 coreapi Pygments Markdown 安装 $ pip install coreapi $ pip install Pygments $ pip install Markdown 使用coreapi DRF框架(>3.10)需要添加 指定用于支持coreapi的shcema REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' } 在 LearnDja
zx钟
2019/10/30
7390
测试开发进阶(三十)
从入门到"精通"Django REST Framework-(五)
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。它是 DRF 中通用视图和视图集的基础,提供了查询、序列化、分页等常用操作的标准实现。本质上它是 DRF 中所有通用视图(如 ListAPIView、RetrieveAPIView 等)的基础。
rxg456
2025/03/01
1490
从入门到"精通"Django REST Framework-(五)
Django Swagger文档库drf-spectacular
在使用DRF的时候,通常的文档有:默认文档RestFrameWork、CoreAPI、Swagger,Swagger是最流行的API文档库,在绝大多数服务端开发中都有用到,之前我们使用了CoreAPI来生成文档,一方面是它不够流行,没办法和其他工具结合,另一方面可能是我不熟悉,所有有些接口并不能按照我们的要求来使用。因此我选择使用Swagger文档,之前使用过drf-yasg,但是drf-yasg现在还不支持OpenAPI 3.0,而在drf-yasg的官方文档中为我们推荐了另一个库:drf-spectacular,而且声明了drf-yasg不太可能支持OpenAPI 3.0,因此推荐我们使用drf-spectacular这个库。
星星在线
2023/03/20
2K0
Django Swagger文档库drf-spectacular
Django rest framework(7)----分页
第一种分页  PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('(?P<version>[v1|v2]+)/page1
zhang_derek
2018/04/11
1.8K0
Django rest framework(7)----分页
Django Rest Framework(版本、解析器、序列化、数据验证)
为了这种情况下每次都要decode,loads,显得麻烦,所以才有的解析器。弥补了django的缺点
用户1214487
2022/03/26
2.3K0
Django Rest Framework(版本、解析器、序列化、数据验证)
相关推荐
DRF Swagger自定义的action文档参数实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档