django-rest-swagger的優(yōu)化使用方法
如下所示:
requirements.txt django==1.10.5 djangorestframework==3.5.3 django-rest-swagger==2.1.1
參考英文文檔:
http://django-rest-swagger.readthedocs.io/en/latest/
使用swagger工具結合Django-rest-framework進行restful API的管理以及可視化顯示的時候,由于swagger2.1以后不再使用yaml文檔描述api,改而使用json描述,雖然swagger有著自動適配url掃描生成文檔的能力,可是自動生成的文檔并不詳細,然而完全通過json文件描述所有的api,工作量比較大,且有的api也不需要詳細描述,因而需要自定義api的json描述和自動掃描生成相結合。
實現(xiàn)如下:
swagger_views.py
# -*- coding: utf-8 -*-
import json
from collections import OrderedDict
from openapi_codec import OpenAPICodec
from openapi_codec.encode import generate_swagger_object
from coreapi.compat import force_bytes
from django.conf import settings
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.schemas import SchemaGenerator
from rest_framework_swagger.renderers import (
SwaggerUIRenderer,
OpenAPIRenderer
)
class SwaggerSchemaView(APIView):
renderer_classes = [
OpenAPIRenderer,
SwaggerUIRenderer
]
def load_swagger_json(self, doc):
"""
加載自定義swagger.json文檔
"""
data = generate_swagger_object(doc)
with open(settings.API_DOC_PATH) as s:
doc_json = json.load(s, object_pairs_hook=OrderedDict)
data['paths'].update(doc_json.pop('paths'))
data.update(doc_json)
return OpenAPICodec().decode(force_bytes(json.dumps(data)))
def get(self, request):
generator = SchemaGenerator(title='后端API文檔',
urlconf='chess_user.urls')
schema = generator.get_schema(request=request)
document = self.load_swagger_json(schema)
return Response(document)
urls.py
from django.conf.urls import url, include from django.conf.urls.static import static from .swagger_views import SwaggerSchemaView urlpatterns = [ url(r'^api-doc/$', SwaggerSchemaView.as_view(), name='docs'),
settings.py
SWAGGER_SETTINGS = {
'JSON_EDITOR': True,
'LOGIN_URL': 'login',
'LOGOUT_URL': 'logout',
}
API_DOC_PATH = os.path.join(BASE_DIR, "api-doc/swagger.json")
api-doc/swagger.json
{
"paths": {
"v1/user/profile/": {
"get": {
"tags": [
"v1"
],
"description": "用戶profile\n",
"responses": {
"200": {
"description": "OK",
"schema": {
"title": "User",
"type": "object",
"properties": {
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"phone_number": {
"type": "string"
}
}
}
}
}
}
}
}
}
若有bug,歡迎指出!
以上這篇django-rest-swagger的優(yōu)化使用方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python神經(jīng)網(wǎng)絡Inception?ResnetV2模型復現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡Inception?ResnetV2模型復現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
Pycharm打印大數(shù)據(jù)文件顯示不全的解決方法
這篇文章主要介紹了Pycharm打印大數(shù)據(jù)文件顯示不全的解決方法,昨晚寫了個小爬蟲,簡單分析下發(fā)現(xiàn)可以修改請求的url,直接獲取所有目標的數(shù)據(jù),想先打印在控制臺看看,發(fā)現(xiàn)打印的數(shù)據(jù)不全,所以本文記錄了一下解決方法,需要的朋友可以參考下2024-03-03
Python Pygame實戰(zhàn)之賽車游戲的實現(xiàn)
如今的游戲可謂是層出不窮,不過小編發(fā)現(xiàn),賽車游戲也是深受大家歡迎啊,像跑跑卡丁車、QQ飛車,還有主機游戲極品飛車系列。本文將用Python中的Pygame模塊制作一個簡單的賽車游戲,感興趣的可以了解一下2022-03-03

