django-rest-swagger的优化使用方法

下面我将为您详细讲解“django-rest-swagger的优化使用方法”的完整攻略:

1. 什么是django-rest-swagger?

django-rest-swaggerrest_framework 的一个扩展,它可以自动生成 API 的文档页面,让前端和其他开发者更方便的查看和测试 API 接口。

2. 使用django-rest-swagger前的准备工作

安装 django-rest-swagger

pip install django-rest-swagger

settings.py 配置 REST_FRAMEWORK 和 SWAGGER_SETTINGS

INSTALLED_APPS += [
    'rest_framework_swagger',
]

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}

SWAGGER_SETTINGS = {
    'USE_SESSION_AUTH': False, # 不使用session验证
    'SECURITY_DEFINITIONS': {
        'Api Token': {
           'type': 'apiKey',
           'name': 'Authorization',
           'in': 'header'
        }
    }
}

3. 使用django-rest-swagger优化API的详细步骤

3.1 使用schema生成文档

views.py 中指定 schema 属性为 SwaggerAutoSchema 的实例,这样能使文档更清晰,并生成文档的一些其他特性,例如分组、描述等

示例代码:

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from rest_framework.schemas import ManualSchema
from rest_framework_swagger import renderers
from rest_framework_swagger import serializers
from rest_framework_swagger import viewsets as vs
from rest_framework_swagger import renderers


class BooksViewSet(viewsets.ModelViewSet):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer
    schema = vs.SwaggerAutoSchema(

        operation_id_base='book-demo',
        manual_fields=[
            coreapi.Field('category', required=True, location='query', description='类型')
        ],
        responses={
            '400': "参数错误",
            '401': "没有访问权限,或者AccessToken过期",
            '404': "资源不存在",
            '405': "请求方法错误",
            '500': "服务器错误"
        },

    )

    @action(
        detail=False,
        methods=['get'],
        permission_classes=[AllowAny],
        serializer_class=ser.BookListSerializer,
        renderer_classes=[renderers.JSONRenderer],
   )
    def get_books_from_category(self, request):
        category_name = request.query_params.get("category", "")
        category = Category.objects.get(name=category_name)

        books = Books.objects.filter(category=category)
        serializer = BookListSerializer(books, many=True, context={'request': request})
        return JsonResponse(serializer.data, safe=False)

3.2 使用markdown语法描述API

在API的 docstring 里面(即 views.py 文件里面各个方法的参数说明文字),编写Markdown格式的文档,可以更好的让其他开发者了解API的使用方法和参数信息。

示例代码:

class BooksViewSet(viewsets.ModelViewSet):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer

    def list(self, request):
        """
        获取所有书籍
        ---
        parameters:
            - name: format
              description: 输出格式
              required: false
              type: string
              choices: ['json', 'xml']
              default: json
              location: query

        """
        books = self.get_queryset()
        serializer = self.get_serializer(books, many=True)
        return Response(serializer.data)

4. 示例代码

在此提供一个能够让前端开发者通过API文档请求WebSocket 实时推送服务的示例代码。

import logging
import json
from channels import Group
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework_swagger import viewsets as vs

logging.basicConfig()

class NotificationViewSet(viewsets.ViewSet):
    @action(detail=False, methods=['post'], permission_classes=[AllowAny])
    def send_message(self, request):
        """
        发送通知
        ---
        parameters:
            - name: msg
              description: 通知内容
              type: string
              required: true
            - name: uuid
              description: 用户id
              type: string
              required: true

        """
        data = request.data
        group_name = f"notification-{data['uuid']}"
        Group(group_name).send({'text': json.dumps(data)})
        return Response({'code': 200, "msg": "ok"})

这段代码中,我们通过 Channel 包创建了一个 WebSocket 的分组(Group),然后在 Django 中,通过请求 API 的方式向这个 Group 中发送了一条消息,消息的内容是 request.data 中的 msg,接收到该WebSocket消息的客户端便可获取该实时消息。

5. 总结

以上就是django-rest-swagger优化API的方法和示例代码,除了可以对API接口进行清晰的文档描述外,还能通过某些特性(例如分组、描述等)组织文档,使文档更清晰直观。同时, 我们还给出了一个示例代码,用以展示如何配合使用 websocket 实现消息的实时推送功能,希望对您有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django-rest-swagger的优化使用方法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • ubuntu安装显卡驱动和cuda教程

    Ubuntu安装显卡驱动和CUDA教程 一、安装显卡驱动 1.1 确认显卡型号 打开终端,输入以下命令查看显卡型号: lspci | grep -i nvidia 如果有输出,则表示你的电脑是NVIDIA显卡,同时记录下显卡型号。 1.2 安装显卡驱动 通过PPA安装 在终端中输入以下命令: sudo add-apt-repository ppa:graph…

    python 2023年5月13日
    00
  • 使用python计算方差方式——pandas.series.std()

    使用Python计算方差是数据分析中常用的操作,Pandas库中的std()函数可以帮助我们计算Series数据的标准差,从而计算方差。下面是使用Pandas库的Series.std()函数计算方差的完整攻略: 步骤一:导入Pandas库 在使用Pandas库的Series.std()函数之前,需要先导入Pandas库。可以使用以下语句导入Pandas库: …

    python 2023年6月5日
    00
  • Python替换月份为英文缩写的实现方法

    好的!下面我将详细讲解“Python替换月份为英文缩写的实现方法”的攻略,这里我将分为三个部分进行说明。 1. 获取替换数据 首先,我们需要获取需要替换的日期数据。通常情况下,我们使用datetime模块中的strftime()函数可以将日期按照我们指定的格式输出,例如: from datetime import datetime # 系统当前日期时间 no…

    python 2023年6月5日
    00
  • python得到电脑的开机时间方法

    以下是“Python得到电脑的开机时间方法”的完整攻略。 方法一:使用WMI库 WMI(Windows Management Instrumentation)是Windows的管理信息系统接口,可以通过它获取Windows的各种系统信息。Python中可以通过安装WMI库来获取Windows上电脑的开机时间。 具体实现过程如下: 第一步,安装WMI库。在命令…

    python 2023年6月2日
    00
  • 如何使用python爬取知乎热榜Top50数据

    如何使用Python爬取知乎热榜Top50数据 在本教程中,我们将介绍如何使用Python爬取知乎热榜Top50数据。我们将使用requests和BeautifulSoup库来实现这个功能。以下是一个完整攻略,包含两个示例。 步骤1:获取热榜数据 首先,我们需要获取知乎热榜Top50的数据。我们可以使用requests库发送HTTP请求,并使用Beautif…

    python 2023年5月15日
    00
  • Python中的SOLID原则实例详解

    当我们在开发Python应用程序时,遵循SOLID原则可以使得代码更加易于维护和扩展。本文将深入讲解SOLID原则及其在Python中的应用。 SOLID原则介绍 SOLID原则是面向对象设计和编程原则的一个缩写,由五条原则组成:单一职责原则(Single Responsibility Principle),开闭原则(Open-Closed Principl…

    python 2023年5月20日
    00
  • python实现简单图书管理系统

    下面我会详细讲解实现简单图书管理系统的完整攻略。 1. 确定需求 在开发任何系统之前,我们需要了解系统的需求,这样可以帮助我们更好的设计系统的结构以及制定开发计划。下面是图书管理系统的需求: 有一个书库,可以添加、删除、修改图书信息。 可以按名称、作者、出版社等关键字进行搜索和查询。 可以显示所有图书信息。 2. 设计数据库 接下来我们需要设计系统的数据库结…

    python 2023年5月19日
    00
  • 基于PyQt5制作一个windows通知管理器

    下面是制作一个Windows通知管理器的完整攻略,包含以下步骤: 步骤一:安装并学习PyQt5 PyQt5是基于Python的GUI框架,用于创建跨平台的应用程序。首先需要安装PyQt5,可以使用pip工具来安装: pip install PyQt5 然后需要学习PyQt5的基础知识,包括信号与槽、控件、布局等。 步骤二:创建主界面 首先需要创建一个主界面,…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部