智慧水务项目(四)django(drf)+angular 18 添加drf_yasg api接口文档

一、说明

文档api接口是必须的

本来准备用coreapi,据说drf_yasg更流弊

二、步骤

1、requirements.txt添加drf-yasg

2、settings.py中添加部分代码

drf_yasg需要与django.contrib.staticfiles配套使用,一般情况下,项目创建都会在INSTALLED_APPS列表中注册这个工具,如果没有,需要手动添加 

在settings.py最后面添加下面代码

# ====================================#
# ****************swagger************#
# ====================================#
SWAGGER_SETTINGS = {
    # 基础样式
    "SECURITY_DEFINITIONS": {"basic": {"type": "basic"}},
    # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的.
    "LOGIN_URL": "apiLogin/",
    # 'LOGIN_URL': 'rest_framework:login',
    "LOGOUT_URL": "rest_framework:logout",
    # 'DOC_EXPANSION': None,
    # 'SHOW_REQUEST_HEADERS':True,
    # 'USE_SESSION_AUTH': True,
    # 'DOC_EXPANSION': 'list',
    # 接口文档中方法列表以首字母升序排列
    "APIS_SORTER": "alpha",
    # 如果支持json提交, 则接口文档中包含json输入框
    "JSON_EDITOR": True,
    # 方法列表字母排序
    "OPERATIONS_SORTER": "alpha",
    "VALIDATOR_URL": None,
    "AUTO_SCHEMA_TYPE": 2,  # 分组根据url层级分,0、1 或 2 层
    "DEFAULT_AUTO_SCHEMA_CLASS": "apps.utils.swagger.CustomSwaggerAutoSchema",
}

3、 如下图usrl.py全文

from django.urls import path, include, re_path

from drf_yasg import openapi
from drf_yasg.views import get_schema_view
# 导入权限控制模块
from rest_framework import permissions
from apps.utils.swagger import CustomOpenAPISchemaGenerator

schema_view = get_schema_view(
    openapi.Info(
        title="SmartWater API",
        default_version="v1",
        description="smartwater 接口文档",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="123@qq.com"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    permission_classes=(permissions.AllowAny,),
    generator_class=CustomOpenAPISchemaGenerator,
)
urlpatterns = [
    re_path(
        r"^swagger(?P<format>\.json|\.yaml)$",
        schema_view.without_ui(cache_timeout=0),
        name="schema-json",
    ),
    path(
        "",
        schema_view.with_ui("swagger", cache_timeout=0),
        name="schema-swagger-ui",
    ),
    path(
        r"redoc/",
        schema_view.with_ui("redoc", cache_timeout=0),
        name="schema-redoc",
    ),
    re_path(
        r"^api-auth/", include("rest_framework.urls", namespace="rest_framework")
    ),
]

 注意目录

4、添加swagger.py文件

注意目录

 

代码:

from drf_yasg.generators import OpenAPISchemaGenerator
from drf_yasg.inspectors import SwaggerAutoSchema

from smartwater.settings import SWAGGER_SETTINGS


def get_summary(string):
    if string is not None:
        result = string.strip().replace(" ","").split("\n")
        return result[0]


class CustomSwaggerAutoSchema(SwaggerAutoSchema):
    def get_tags(self, operation_keys=None):
        tags = super().get_tags(operation_keys)
        if "api" in tags and operation_keys:
            #  `operation_keys` 内容像这样 ['v1', 'prize_join_log', 'create']
            tags[0] = operation_keys[SWAGGER_SETTINGS.get('AUTO_SCHEMA_TYPE', 2)]
        return tags

    def get_summary_and_description(self):
        summary_and_description = super().get_summary_and_description()
        summary = get_summary(self.__dict__.get('view').__doc__)
        description = summary_and_description[1]
        return summary,description


class CustomOpenAPISchemaGenerator(OpenAPISchemaGenerator):
    def get_schema(self, request=None, public=False):
        """Generate a :class:`.Swagger` object with custom tags"""

        swagger = super().get_schema(request, public)
        swagger.tags = [
            {
                "name": "token",
                "description": "认证相关"
            },
        ]
        return swagger

 三、测试一下

python manage.py runserver 127.0.0.1:8000

没有写view,所以东西没有 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django REST Framework (DRF) 是一个用于构建 Web API 的强大工具,它是基于 Django 框架的。DRF 提供了方便的方式来处理 HTTP 请求,定义视图、序列化器、路由以及认证等组件,使得开发RESTful API变得更加高效和易于维护。 接口文档DRF中非常关键的一部分,它帮助开发者、团队成员和外部用户提供对API的清晰理解。在DRF中,你可以使用`rest_framework.authtoken`或`drf_yasg`库(如Swagger UI)来生成详细的API文档。以下是生成和使用DRF接口文档的一些步骤: 1. 安装必要的库(如`drf_yasg`): ```bash pip install djangorestframework drf-yasg ``` 2. 配置settings.py中的SWAGGER设置: ```python INSTALLED_APPS = [ # ... 'drf_yasg', 'rest_framework_swagger', ] ``` 3. 在`urls.py`中包含API和文档的URL路径: ```python from drf_yasg.views import get_schema_view schema_view = get_schema_view(title='Your API Name', public=True) urlpatterns = [ # Your API routes... path('openapi/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), ] ``` 4. 创建视图和定义序列化器: 使用DRF的ViewSet和Serializer为你的API资源定义行为。 5. 使用`@api_view`装饰器或`@action`方法来定义API操作。 6. 运行服务器并访问`http://yourserver.com/openapi/`,通常会显示一个交互式的Swagger UI页面,其中包含了你的API的所有公开接口和描述。 相关问题: 1. Swagger UI在DRF中起到什么作用? 2. 如何在DRF中使用`@api_view`装饰器定义API? 3. 如何自定义接口文档的主题和样式?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值