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日

相关文章

  • Python 复平面绘图实例

    先来简单介绍一下“Python 复平面绘图实例”。 Python 复平面绘图实例是一个可以让你在 Python 中使用复平面绘制图像的工具。复平面在数学中是一个非常重要的概念,它可以用来描述复数,也可以用来描述复变函数的性质。通过使用 Python 复平面绘图实例,你可以更加直观地了解复平面的性质,也可以更好地理解复数和复变函数。 下面,我将详细讲解“Pyt…

    python 2023年6月3日
    00
  • 如何在Python中插入PostgreSQL数据库中的数据?

    以下是在Python中插入PostgreSQL数据库中的数据的完整使用攻略。 使用PostgreSQL数据库的前提条件 在使用Python连接PostgreSQL数据库之前,确已经安装了PostgreSQL数据库已经创建使用数据库和表,还需要安装Python的驱动程序,例如psycopg2。 步骤1:导入模块 在Python使用psycopg2模块连接Pos…

    python 2023年5月12日
    00
  • python3处理含有中文的url方法

    当我们使用Python处理含有中文的URL时,需要先进行URL编码,将中文转换成对应的URL编码,以保证URL的正确性。下面是处理含有中文的URL的完整攻略。 1. URL编码 URL编码是将URL中的非ASCII字符转换为特殊字符序列来表示,以便在所有的Web浏览器和服务器中传输。Python提供了urllib.parse模块中的quote()函数,可以实…

    python 2023年5月20日
    00
  • 利用python控制Autocad:pyautocad方式

    利用Python控制AutoCAD有不同的方式,其中一种方式是使用pyautocad库。下面是一些步骤和示例说明: 安装pyautocad库 在控制台输入以下语句即可完成库的安装: pip install pyautocad 连接到AutoCAD应用程序 使用pyautocad库连接到AutoCAD应用程序,可以使用COM或者netload方式。下面是使用C…

    python 2023年5月19日
    00
  • python函数的5种参数详解

    Python函数的5种参数详解 函数是Python中最重要的工具之一。在Python中,函数有五种不同类型的参数,这让函数更加灵活和有用。下面我们将逐一介绍它们。 位置参数 位置参数是最常用的参数类型。当你传递值给函数时,Python会按照传递的值的顺序来确定哪些参数应该绑定到哪些值。这样的参数称为位置参数。下面是一个简单的例子: def greet(nam…

    python 2023年6月5日
    00
  • Python实现SQL注入检测插件实例代码

    在本攻略中,我们将介绍如何使用Python实现SQL注入检测插件。以下是一个完整攻略,包括两个示例。 步骤1:分析SQL注入 首先,需要了解SQL注入的原理和检测方法。SQL注入是一种常见的Web攻击方式,攻击者通过在Web应用程序中注入恶意的SQL代码,从而获取敏感信息或者控制数据库。检测SQL注入的方法包括手工检测和自动检测。手工检测需要对Web应用程序…

    python 2023年5月15日
    00
  • python实现网页录音效果

    实现网页录音效果可以通过使用HTML5的MediaRecorder API和Python的Flask框架实现。下面是实现的详细攻略: 1. 前端实现 使用HTML5的MediaRecorder API来录制音频文件,并将其转换成Blob对象和formData对象上传到服务器。 示例代码: <input type="button" i…

    python 2023年5月23日
    00
  • 执行Django数据迁移时报 1091错误及解决方法

    一、背景介绍 在进行Django项目开发时,经常会使用到数据迁移(migration)功能,它能够方便地将模型中的数据结构更改同步到数据库。但有时在进行数据迁移时,会遇到错误反馈,比如报1091错误。本文将详细讲解这种错误的原因和解决方法。 二、错误原因 1091错误的报错信息为: django.db.utils.OperationalError: (109…

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