日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

如何在Django REST框架中使用Swagger API

 風(fēng)聲之家 2021-04-09

WEB前端開發(fā)社區(qū) 今天

圖片

在本教程的這里,我將向您展示如何在Django REST框架中使用Swagger API。Swagger API為REST API端點(diǎn)提供了結(jié)構(gòu)良好的文檔,因此新手可以說如何在不了解其內(nèi)部實(shí)現(xiàn)的情況下測試REST API。
本質(zhì)上,Swagger做的是簡單但非常強(qiáng)大的事情:通過添加一些附加注釋,它會(huì)生成REST API描述,例如HTTP方法,路徑/查詢/表單參數(shù),響應(yīng),HTTP錯(cuò)誤代碼等),甚至提供了一個(gè)簡單的Web UI來對(duì)您的API的REST調(diào)用。
Swagger規(guī)范是描述RESTful API的強(qiáng)大定義格式,它創(chuàng)建RESTful接口,通過有效地映射與之關(guān)聯(lián)的所有資源和操作來輕松開發(fā)和使用API。它易于學(xué)習(xí),與語言無關(guān),并且可以人工和機(jī)器可讀。
先決條件 
Python 3.8.5,Django 3.0.8,REST框架(pip install djangorestframework),Swagger(pip install django-rest-swagger)
假定您已經(jīng)在系統(tǒng)上安裝并配置了Python。
下一個(gè)任務(wù)是安裝Django。首選方法是使用命令pip install Django進(jìn)行安裝。您可以閱讀有關(guān)Django安裝的更多詳細(xì)信息。
我們將使用MySQL數(shù)據(jù)庫服務(wù)器作為存儲(chǔ)數(shù)據(jù)的持久系統(tǒng),因此您需要閱讀教程,了解如何使用django設(shè)置MySQL以執(zhí)行SQL語句。
另外,您需要使用命令pip install django-rest-swagger安裝Swagger模塊。
我建議您先閱讀Django MySQL REST CRUD API示例教程,然后再繼續(xù)學(xué)習(xí)。因?yàn)榇耸纠『米裱摻坛?。在此示例中,除了REST API CRUD示例之外,我還添加了Swagger API。
在本示例中,我將不展示項(xiàng)目的每個(gè)部分,因?yàn)槲覍⑴c現(xiàn)有項(xiàng)目一起工作,但是我將介紹重要的更改。您以后總是可以從本教程底部的鏈接從我的Github帳戶下載完整的項(xiàng)目。
項(xiàng)目設(shè)置 
我們需要做的第一件事是創(chuàng)建項(xiàng)目目錄。項(xiàng)目名稱為djangomysqlrestcrudswagger,我們將使用以下命令創(chuàng)建該項(xiàng)目。
<span class="code-snippet_outer">django-admin startproject djangomysqlrestcrudswagger</span>
下一步是在項(xiàng)目內(nèi)部創(chuàng)建一個(gè)應(yīng)用程序以執(zhí)行CRUD操作。使用以下命令創(chuàng)建一個(gè)名為restcrudswagger的應(yīng)用程序。
<span class="code-snippet_outer">django-admin startapp restcrudswagger</span>
現(xiàn)在,我們需要將此restcrudswagger應(yīng)用程序添加到項(xiàng)目中。因此,編輯文件djangomysqlrestcrudswagger / djangomysqlrestcrudswagger / settings.py并將以下行添加到INSTALLED_APPS部分:
<span class="code-snippet_outer"><span class="code-snippet__attribute">INSTALLED_APPS</span> = [</span></code><code><span class="code-snippet_outer">    ...</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__string">'rest_framework_swagger'</span>,</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__string">'restcrudswagger.apps.RestcrudswaggerConfig'</span>,</span></code><code><span class="code-snippet_outer">]</span>
上一行是使用文件djangomysqlrestcrudswagger / restcrudswagger / apps.py構(gòu)成的。您將在此文件中看到名為=’restcrudswagger’的RestcrudswaggerConfig類。
您需要將以下行添加到上述文件(settings.py)中,否則您將看到錯(cuò)誤“ /’AutoSchema’對(duì)象的AttributeError沒有屬性’get_link’”。
<span class="code-snippet_outer"><span class="code-snippet__attr">REST_FRAMEWORK</span> = { <span class="code-snippet__string">'DEFAULT_SCHEMA_CLASS'</span>: <span class="code-snippet__string">'rest_framework.schemas.coreapi.AutoSchema'</span> }</span>
URLS 
接下來,我將更改URL方案以添加用于REST文檔的Swagger API。將以下代碼寫入文件 djangomysqlrestcrudswagger / djangomysqlrestcrudswagger / urls.py中。
<span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> rest_framework_swagger.views <span class="code-snippet__keyword">import</span> get_swagger_view</span></code><code><span class="code-snippet_outer"></span></code><code><span class="code-snippet_outer">schema_view = get_swagger_view(title=<span class="code-snippet__string">'User API'</span>)</span></code><code><span class="code-snippet_outer"></span></code><code><span class="code-snippet_outer">urlpatterns = [</span></code><code><span class="code-snippet_outer">    url(<span class="code-snippet__string">'^$'</span>, schema_view)</span></code><code><span class="code-snippet_outer">]</span>
帶有源代碼的整個(gè)文件如下:
<span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> django.urls <span class="code-snippet__keyword">import</span> include, path</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> rest_framework <span class="code-snippet__keyword">import</span> routers</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> restcrudswagger <span class="code-snippet__keyword">import</span> views</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> django.conf.urls <span class="code-snippet__keyword">import</span> url</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">from</span> rest_framework_swagger.views <span class="code-snippet__keyword">import</span> get_swagger_view</span></code><code><span class="code-snippet_outer"></span></code><code><span class="code-snippet_outer">router = routers.DefaultRouter()</span></code><code><span class="code-snippet_outer">router.register(<span class="code-snippet__string">r'users'</span>, views.UserViewSet)</span></code><code><span class="code-snippet_outer"></span></code><code><span class="code-snippet_outer">schema_view = get_swagger_view(title=<span class="code-snippet__string">'User API'</span>)</span></code><code><span class="code-snippet_outer"></span></code><code><span class="code-snippet_outer">urlpatterns = [</span></code><code><span class="code-snippet_outer">    url(<span class="code-snippet__string">'^$'</span>, schema_view),</span></code><code><span class="code-snippet_outer">    url(<span class="code-snippet__string">r'^'</span>, include(router.urls))</span></code><code><span class="code-snippet_outer">]</span>
Swagger UI Template
接下來,您需要?jiǎng)?chuàng)建Swagger模板文件,該文件將在您訪問URL時(shí)呈現(xiàn)。
以下內(nèi)容被寫入djangomysqlrestcrudswagger / restcrudswagger / templates / rest_framework_swagger / index.html。
<span class="code-snippet_outer"><span class="code-snippet__meta"><!DOCTYPE html></span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag"><<span class="code-snippet__name">html</span>></span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__tag"><<span class="code-snippet__name">head</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">title</span>></span>Swagger<span class="code-snippet__tag"></<span class="code-snippet__name">title</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">meta</span> <span class="code-snippet__attr">charset</span>=<span class="code-snippet__string">"utf-8"</span>/></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">meta</span> <span class="code-snippet__attr">name</span>=<span class="code-snippet__string">"viewport"</span> <span class="code-snippet__attr">content</span>=<span class="code-snippet__string">"width=device-width, initial-scale=1"</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">link</span> <span class="code-snippet__attr">rel</span>=<span class="code-snippet__string">"stylesheet"</span> <span class="code-snippet__attr">type</span>=<span class="code-snippet__string">"text/css"</span> <span class="code-snippet__attr">href</span>=<span class="code-snippet__string">"//unpkg.com/swagger-ui-dist@3/swagger-ui.css"</span> /></span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__tag"></<span class="code-snippet__name">head</span>></span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__tag"><<span class="code-snippet__name">body</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">div</span> <span class="code-snippet__attr">id</span>=<span class="code-snippet__string">"swagger-ui"</span>></span><span class="code-snippet__tag"></<span class="code-snippet__name">div</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">script</span> <span class="code-snippet__attr">src</span>=<span class="code-snippet__string">"//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"</span>></span><span class="code-snippet__tag"></<span class="code-snippet__name">script</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag"><<span class="code-snippet__name">script</span>></span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">const</span> ui = SwaggerUIBundle({</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__attr">url</span>: <span class="code-snippet__string">"{% url schema_url %}"</span>,</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__attr">dom_id</span>: <span class="code-snippet__string">'#swagger-ui'</span>,</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__attr">presets</span>: [</span></code><code><span class="code-snippet_outer">          SwaggerUIBundle.presets.apis,</span></code><code><span class="code-snippet_outer">          SwaggerUIBundle.SwaggerUIStandalonePreset</span></code><code><span class="code-snippet_outer">        ],</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__attr">layout</span>: <span class="code-snippet__string">"BaseLayout"</span></span></code><code><span class="code-snippet_outer">      })</span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag"></<span class="code-snippet__name">script</span>></span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__tag"></<span class="code-snippet__name">body</span>></span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag"></<span class="code-snippet__name">html</span>></span></span>
已知問題 
如果在訪問URL http:// localhost:8000時(shí)看到以下錯(cuò)誤,則可以編輯路徑中提到的以下文件,如下圖所示:
圖片
Replace the line {% load staticfiles %} by {% load static %} at line 2.
部署應(yīng)用 
現(xiàn)在,我準(zhǔn)備測試構(gòu)建的API。讓我們使用manage.py runserver從命令行啟動(dòng)服務(wù)器。該應(yīng)用程序?qū)⒃谀J(rèn)端口8000上運(yùn)行。如果要更改服務(wù)器的默認(rèn)主機(jī)/端口,則可以在此處閱讀教程。
測試應(yīng)用 
現(xiàn)在,如果您正確地遵循了教程,那么在訪問URL http:// localhost:8000時(shí),您將在瀏覽器上看到以下屏幕:


來源:

https://www./how-to-use-swagger-with-python-based-django-rest-apis/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多