日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

0013 COREAPI自动生成接口文档

發布時間:2023/12/15 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 0013 COREAPI自动生成接口文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  CoreAPI是基于djangorestframework框架下的自動文檔生成器,只要按DRF規則寫的路由,CoreAPI就可以自動生成接口文檔。

1 編寫DRF視圖

  編寫DRF視圖有多種方式,

  本文本主要展示接口文檔的自動生成。故編寫一個最簡單的視圖。

1.1 新增一個視圖文件

  在Examples/views目錄下,創建一個CoreAPI.py文件,其中創建了兩個類,代碼如下:

from django.shortcuts import render
from rest_framework.views import APIView
from django.http import QueryDict
from rest_framework.response import Response
from rest_framework import status


class CoreAPI(APIView):
    @classmethod
    def get(cls, request):
        """
        【功能描述】主要用于描述模塊功能</br>
        【模塊元素】用于描述模塊中存在的相關元素</br>
        【返回參數】用于描述模塊的返回參數</br>
        """
        return render(request, 'exp-home.html')

    @classmethod
    def post(cls, request):
        """
        【功能描述】用于保存表</br>
        【返回參數】用于返回模塊的返回參數。</br>
        """
        username = request.POST.get('user')
        data = QueryDict(request.body.decode("utf-8"), encoding="utf-8").dict()
        return Response(data, status=status.HTTP_200_OK)


class LoginHome(APIView):
    @classmethod
    def get(cls, request):
        """
        返回登錄頁面。登錄頁面主要包括以下功能:</br>
        【快捷登錄】</br>
        
        包括四個元素手機號輸入框,發送驗證碼按鈕,驗證碼輸入框,確定按鈕</br>
        【密碼登錄】</br>
        
        包括兩個元素:1 用戶名或手機號 2 密碼</br>
        【找回密碼】</br>
        
        是一個找回密碼的標簽,用于跳轉到找回密碼頁面
        """
        return render(request, 'exp-home.html')

1.2 修改ExpHome.py視圖文件

  之前ExpHome.py文件中,主要用于返回一個網頁,是Django本身的類方法。繼承來自View,只繼承APIView改成DRF框架,就可以生成到接口文檔中了。

from django.views.generic import View
from django.shortcuts import render
from rest_framework.views import APIView


class ExoHome(APIView):
    @classmethod
    def get(cls, request):
        """
        【功能描述】主要用于示例展示</br>
        【返回參數】返回用戶請求的網頁</br>
        """
        return render(request, 'exp-home.html')

2 修改Examples分路由

from django.urls import path
from Applications.Examples.views import ExpHome, CoreAPI

urlpatterns = [
    path('ExpHome/', ExpHome.ExoHome.as_view()),
    path('CoreAPI/', CoreAPI.CoreAPI.as_view()),
    path('LoginHome/', CoreAPI.LoginHome.as_view()),
]

3 修改工程總路由

from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urls

DESCRIPTION = """
        包括仝恒績效云所有接口文檔。包括以下應用:
        1 Authentication:認證服務應用
        2 Organization: 組織機構應用
"""
urlpatterns = [
    path('admin/', admin.site.urls),
    path('Examples/', include('Applications.Examples.urls')),
    path('docs/', include_docs_urls(title='API接口文檔', description=DESCRIPTION)),
]

4 運行工程,就可以看到接口文檔的效果了。

5 編寫繼承類

  由于CoreAPI沒有對于GET方法請求參數的描述,故需要先編寫一個繼承類,使得用戶可以在序列化器中直接明確相應的備注。

  在GeneralTools下創建一個CustomSchema.py文件。內容如下:

from rest_framework.schemas import AutoSchema


class CustomSchema(AutoSchema):
    """
    自定義AutoSchema,為view手動添加注釋
    """

    def get_manual_fields(self, path, method):
        """
        location有下列可選選項可以選:
        path 包含在模板化URI中。例如,url值/products/{product_code}/可以與"path"字段一起使用。
        query 包含在URL查詢參數中。例如?search=sale。通常用于GET請求。
        form 包含在請求正文中,作為JSON對象或HTML表單的單個項目。例如{"colour": "blue", ...}。通常的POST,PUT和PATCH請求。"form"單個鏈接上可以包含多個字段。
        header 包含在請求頭中,可以自定義。
        {
            'get': [
                coreapi.Field(name="mobile", required=True, location="path", schema=coreschema.String(description='手機號')),
                coreapi.Field(name="name", required=True, location="query", schema=coreschema.String(description='用戶名')),
                coreapi.Field(name="password", required=True, location="query", schema=coreschema.String(description='密碼')),
            ],
            'post': [
                coreapi.Field(name="mobile", required=True, location="path", schema=coreschema.String(description='手機號')),
                coreapi.Field(name="subject", required=True, location="query", schema=coreschema.String(description='郵件主題')),
                coreapi.Field(name="message", required=True, location="query", schema=coreschema.String(description='郵件正文')),
                coreapi.Field(name="to_email", required=True, location="query", schema=coreschema.String(description='收件人')),
            ],
        }
        """

        # 可能是list,也可能是dict
        manual_fields = super(CustomSchema, self).get_manual_fields(path, method)

        if type(manual_fields) == list:
            return manual_fields
        else:
            # dict
            for k, v in self._manual_fields.items():
                if method.lower() == k.lower():
                    return v
            else:
                return []

 

總結

以上是生活随笔為你收集整理的0013 COREAPI自动生成接口文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。