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工具結(jié)合Django-rest-framework進(jìn)行restful API的管理以及可視化顯示的時(shí)候,由于swagger2.1以后不再使用yaml文檔描述api,改而使用json描述,雖然swagger有著自動(dòng)適配url掃描生成文檔的能力,可是自動(dòng)生成的文檔并不詳細(xì),然而完全通過(guò)json文件描述所有的api,工作量比較大,且有的api也不需要詳細(xì)描述,因而需要自定義api的json描述和自動(dòng)掃描生成相結(jié)合。
實(shí)現(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)化使用方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化
- Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例
- 淺談優(yōu)化Django ORM中的性能問(wèn)題
- Django查詢優(yōu)化及ajax編碼格式原理解析
- 詳解Django配置優(yōu)化方法
- Django之使用celery和NGINX生成靜態(tài)頁(yè)面實(shí)現(xiàn)性能優(yōu)化
- 詳解Django的model查詢操作與查詢性能優(yōu)化
- Django代碼性能優(yōu)化與Pycharm Profile使用詳解
- Django程序的優(yōu)化技巧
相關(guān)文章
python神經(jīng)網(wǎng)絡(luò)Inception?ResnetV2模型復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Inception?ResnetV2模型復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Pycharm打印大數(shù)據(jù)文件顯示不全的解決方法
這篇文章主要介紹了Pycharm打印大數(shù)據(jù)文件顯示不全的解決方法,昨晚寫(xiě)了個(gè)小爬蟲(chóng),簡(jiǎn)單分析下發(fā)現(xiàn)可以修改請(qǐng)求的url,直接獲取所有目標(biāo)的數(shù)據(jù),想先打印在控制臺(tái)看看,發(fā)現(xiàn)打印的數(shù)據(jù)不全,所以本文記錄了一下解決方法,需要的朋友可以參考下2024-03-03Python中設(shè)置變量作為默認(rèn)值時(shí)容易遇到的錯(cuò)誤
這篇文章主要介紹了Python中設(shè)置變量作為默認(rèn)值時(shí)容易遇到的錯(cuò)誤,這是Python新手經(jīng)常容易碰到的問(wèn)題,且往往不會(huì)被輕易察覺(jué)到,需要的朋友可以參考下2015-04-04Python Pygame實(shí)戰(zhàn)之賽車游戲的實(shí)現(xiàn)
如今的游戲可謂是層出不窮,不過(guò)小編發(fā)現(xiàn),賽車游戲也是深受大家歡迎啊,像跑跑卡丁車、QQ飛車,還有主機(jī)游戲極品飛車系列。本文將用Python中的Pygame模塊制作一個(gè)簡(jiǎn)單的賽車游戲,感興趣的可以了解一下2022-03-03Python利用matplotlib繪制散點(diǎn)圖的新手教程
這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制散點(diǎn)圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python中樹(shù)與樹(shù)的表示知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是關(guān)于python中樹(shù)與樹(shù)的表示的相關(guān)知識(shí)點(diǎn),需要的讀者們學(xué)習(xí)下吧。2019-09-09