<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django集成Swagger全指南:兩種實現方案詳解

      一、前言

      概述

      在前后端分離開發中,API 文檔的重要性不言而喻。Swagger(現更名為 OpenAPI)作為主流的 API 文檔生成工具,能自動生成交互式文檔,極大提升開發效率。本文將介紹兩種在 Django 項目中集成 Swagger 的實用方案,幫助開發者快速搭建完善的 API 文檔系統。

      什么是 Swagger/OpenAPI?

      Swagger 是一套用于描述、生成、消費和可視化 RESTful API 的規范和工具集,目前已演進為 OpenAPI 規范:

      • Swagger 2.0:支持 WebSockets、OAuth2、文件上傳等功能,提升了 API 描述的精確度
      • OpenAPI 3.0:下一代規范,提供更嚴格的模式驗證、更多數據類型支持和更好的擴展性

      通過集成 Swagger,開發者可以獲得:

      • 自動生成的交互式 API 文檔
      • 在線接口調試功能
      • 標準化的 API 描述格式(JSON/YAML)
      • 便于前后端協作和 API 版本管理

      兩種方案對比

      特性 drf-yasg drf-spectacular
      規范支持 Swagger 2.0 OpenAPI 3.0
      功能豐富度 基礎功能完善 高級功能更豐富
      可定制性 中等
      學習曲線 平緩 稍陡
      推薦場景 簡單項目快速集成 復雜項目、需要高級定制

      二、方案一:使用 drf-yasg(支持 Swagger 2.0)

      工具介紹

      drf-yasg 是基于 Django REST Framework (DRF) 的 API 文檔生成工具,專注于 Swagger 2.0 規范,具有以下特點:

      • 動態生成 Swagger UI,支持多種主題
      • 可自定義文檔樣式和內容
      • 支持隱藏指定字段、添加額外參數等高級功能

      安裝步驟

      安裝

      pip install -U drf-yasg
      

      配置settings.py:在 INSTALLED_APPS 中添加相關應用

      INSTALLED_APPS = [
         # ...
         'django.contrib.staticfiles',  # 用于提供 Swagger UI 的靜態文件
         'drf_yasg',
         # ...
      ]
      

      配置urls.py:添加 Swagger 相關路由

      from django.urls import re_path
      from rest_framework import permissions
      from drf_yasg.views import get_schema_view
      from drf_yasg import openapi
      
      # 配置 API 文檔基本信息
      schema_view = get_schema_view(
         openapi.Info(
            title="項目 API",
            default_version='v1',
            description="API 接口文檔描述",
            terms_of_service="https://www.example.com/terms/",
            contact=openapi.Contact(email="contact@example.com"),
            license=openapi.License(name="MIT License"),
         ),
         public=True,
         permission_classes=(permissions.AllowAny,),  # 允許任何人訪問文檔
      )
      
      # 添加 URL 路由
      urlpatterns = [
         # ...
         # 文檔 JSON/YAML 下載
         path('swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
         # Swagger UI 頁面
         path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
         # ReDoc 頁面
         path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
         # ...
      ]
      

      查看效果

      啟動 Django 項目后,通過以下地址訪問文檔:

      • Swagger UI 界面:http://localhost:8000/swagger/

      image-20241009183315554

      • ReDoc 界面:http://localhost:8000/redoc/
      • 下載 JSON 格式文檔:http://localhost:8000/swagger.json
      • 下載 YAML 格式文檔:http://localhost:8000/swagger.yaml

      三、方案二:使用 drf-spectacular(支持 OpenAPI 3.0)

      工具介紹

      drf-spectacular 是新一代 API 文檔生成工具,支持 OpenAPI 3.0 規范,具有以下優勢:

      • 更強的可擴展性和可定制性
      • 支持客戶端代碼生成
      • 兼容多種 DRF 插件
      • 提供更豐富的文檔裝飾器

      參考資料: drf-spectacular 官方文檔

      安裝步驟

      安裝

      pip install drf-spectacular
      pip install drf-spectacular[sidecar] # 安裝內置 UI 資源(推薦)
      

      配置 settings.py:點擊查看完整代碼

      INSTALLED_APPS = [
      	# ...
          'drf_spectacular',
          'drf_spectacular_sidecar',  # 內置 UI 資源
          # ...
      ]
      
      # 配置 DRF
      REST_FRAMEWORK = {
          # OpenAPI 文檔
          'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
      }
      
      ### drf-spectacular OpenAPI 文檔配置
      SPECTACULAR_SETTINGS = {
          "SWAGGER_UI_DIST": "SIDECAR",  # 使用內置 UI
          "SWAGGER_UI_FAVICON_HREF": "SIDECAR",
          "TITLE": "MarsMgn API",
          "DESCRIPTION": "火星信息平臺接口文檔",
          "VERSION": "1.0.0",
          "SERVE_INCLUDE_SCHEMA": False,  # 不在文檔中包含 schema 本身
      }
      

      配置 urls.py:點擊查看完整代碼

      from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
      
      urlpatterns = [
          #...
          # API schema 生成端點
          path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
          # Swagger UI 界面
          path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
          # ReDoc 界面
          path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
          #...
      ]
      

      查看效果

      啟動 Django 項目后,通過以下地址訪問 Swagger UI 界面:http://127.0.0.1:8000/api/schema/swagger-ui

      image-20250722082135270

      四、drf-spectacular 高級使用技巧

      字段注釋

      文檔描述優先從序列化器 / 模型的 help_text 提?。?/p>

      class SystemPost(models.Model):
          id = models.BigAutoField(primary_key=True, help_text="崗位ID")
          code = models.CharField(
              max_length=64,
              help_text="崗位編碼",  # 會顯示在文檔中
          )
      

      接口說明

      使用 @extend_schema 裝飾器自定義接口描述:

      from drf_spectacular.utils import extend_schema
      
      @extend_schema(summary="創建崗位", description="自定義接口詳細說明")
      @action(methods=["post"], detail=False, url_path="create")
      def create_post(self, request, *args, **kwargs):
          return self.custom_create(request, *args, **kwargs)
      

      接口分組

      通過 tags 參數對接口進行分組:

      @extend_schema(tags=["管理后臺-system-崗位"])
      class PostViewSet(CustomViewSet):
          queryset = SystemPost.objects.all()
          filterset_class = SystemPostFilter
      

      請求與響應參數定義

      定義響應參數示例

      from drf_spectacular.utils import extend_schema, OpenApiResponse
      from drf_spectacular.types import OpenApiTypes
      
      @extend_schema(
          responses={
              200: OpenApiResponse(
                  description="操作成功",
                  response={
                      "type": "object",
                      "properties": {
                          "code": {"type": "integer", "example": 0},
                          "data": {"type": "boolean", "example": True},
                          "msg": {"type": "string", "example": ""}
                      }
                  }
              )
          }
      )
      def delete_post(self, request, *args, ?**kwargs):
          """刪除崗位"""
          return Response({"code": 0, "data": True, "msg": ""}, status=200)
      

      您正在閱讀的是《Django從入門到實戰》專欄!關注不迷路~

      posted @ 2025-07-22 08:55  小王子1024  閱讀(381)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人精品自拍视频免费看| 国产三级a三级三级| 91中文字幕在线一区| 成人精品老熟妇一区二区| 国产一区二区三区自拍视频 | 国产区成人精品视频| 久久人与动人物a级毛片| 一边捏奶头一边高潮视频| 国产成人AV男人的天堂| 久久精品国产国产精品四凭| 狠狠色综合播放一区二区| 国产成人精品视频不卡| 国产精品无遮挡在线观看 | 丰满的女邻居2| 亚洲人妻精品一区二区| 亚洲av日韩av中文高清性色| 欧美熟妇乱子伦XX视频| 午夜天堂一区人妻| 亚洲精品成人片在线观看精品字幕| 久青草视频在线观看免费| 亚洲国产欧美在线人成AAAA| 欧美极品色午夜在线视频 | 熟妇激情一区二区三区| 狠狠躁夜夜躁人人爽天天5| 精品91在线| 国产精品视频一区二区不卡| 在线天堂最新版资源| 性视频一区| 色综合色狠狠天天综合网| 国产亚洲欧美日韩在线一区二区三| 国产乱啊有帅gv小太正| 人妻无码久久久久久久久久久 | 四虎在线成人免费观看| 亚洲综合无码明星蕉在线视频| 通榆县| 国模雨珍浓密毛大尺度150p| 97久久综合亚洲色hezyo| 亚洲伊人久久精品影院| 精品国产不卡在线观看免费| 久久精品视频一二三四区| 婷婷四虎东京热无码群交双飞视频|