這篇文章給大家分享的是有關(guān)怎么借助Django來(lái)編寫(xiě)一個(gè)Python Web API的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)建站從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元齊河做網(wǎng)站,已為上家服務(wù),為齊河各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
Django 所有 Web 框架中最全面的,也是最受歡迎的一個(gè)。自 2005 年以來(lái),其流行度大幅上升。
Django 是由 Django 軟件基金會(huì)維護(hù),并且獲得了社區(qū)的大力支持,在全球擁有超過(guò) 11,600 名成員。在 Stack Overflow 上,約有 191,000 個(gè)帶 Django 標(biāo)簽的問(wèn)題。Spotify、YouTube 和 Instagram 等都使用 Django 來(lái)構(gòu)建應(yīng)用程序和數(shù)據(jù)管理。
本文演示了一個(gè)簡(jiǎn)單的 API,通過(guò)它可以使用 HTTP 協(xié)議的 GET 方法來(lái)從服務(wù)器獲取數(shù)據(jù)。
首先,為你的 Django 應(yīng)用程序創(chuàng)建一個(gè)目錄結(jié)構(gòu),你可以在系統(tǒng)的任何位置創(chuàng)建:
$ mkdir myproject$ cd myproject
然后,在項(xiàng)目目錄中創(chuàng)建一個(gè)虛擬環(huán)境來(lái)隔離本地包依賴關(guān)系:
$ python3 -m venv env$ source env/bin/activate
在 Windows 上,使用命令 env\Scripts\activate
來(lái)激活虛擬環(huán)境。
然后,安裝 Django 和 Django REST 模塊:
$ pip3 install django$ pip3 install djangorestframework
現(xiàn)在你的應(yīng)用程序已經(jīng)有了一個(gè)工作環(huán)境,你必須實(shí)例化一個(gè)新的 Django 項(xiàng)目。與 Flask 這樣微框架不同的是,Django 有專門(mén)的命令來(lái)創(chuàng)建(注意第一條命令后的 .
字符)。
$ django-admin startproject tutorial .$ cd tutorial$ django-admin startapp quickstart
Django 使用數(shù)據(jù)庫(kù)來(lái)管理后端,所以你應(yīng)該在開(kāi)始開(kāi)發(fā)之前同步數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)可以通過(guò) manage.py
腳本管理,它是在你運(yùn)行 django-admin
命令時(shí)創(chuàng)建的。因?yàn)槟悻F(xiàn)在在 tutorial
目錄,所以使用 ../
符號(hào)來(lái)運(yùn)行腳本,它位于上一層目錄:
$ python3 ../manage.py makemigrationsNo changes detected$ python4 ../manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
創(chuàng)建一個(gè)名為 admin
,示例密碼為 password123
的初始用戶:
$ python3 ../manage.py createsuperuser \ --email admin@example.com \ --username admin
在提示時(shí)創(chuàng)建密碼。
為了使 Django 能夠?qū)⑿畔鬟f給 HTTP GET 請(qǐng)求,必須將信息對(duì)象轉(zhuǎn)化為有效的響應(yīng)數(shù)據(jù)。Django 為此實(shí)現(xiàn)了“序列化類(lèi)” serializers
。
在你的項(xiàng)目中,創(chuàng)建一個(gè)名為 quickstart/serializers.py
的新模塊,使用它來(lái)定義一些序列化器,模塊將用于數(shù)據(jù)展示:
from django.contrib.auth.models import User, Groupfrom rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ['url', 'username', 'email', 'groups'] class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ['url', 'name']
Django 中的視圖是一個(gè)接受 Web 請(qǐng)求并返回 Web 響應(yīng)的函數(shù)。響應(yīng)可以是 HTML、HTTP 重定向、HTTP 錯(cuò)誤、JSON 或 XML 文檔、圖像或 TAR 文件,或者可以是從 Internet 獲得的任何其他內(nèi)容。要?jiǎng)?chuàng)建視圖,打開(kāi) quickstart/views.py
并輸入以下代碼。該文件已經(jīng)存在,并且其中包含一些示例文本,保留這些文本并將以下代碼添加到文件中:
from django.contrib.auth.models import User, Groupfrom rest_framework import viewsetsfrom tutorial.quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ API 允許查看或編輯用戶 """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API 允許查看或編輯組 """ queryset = Group.objects.all() serializer_class = GroupSerializer
現(xiàn)在,你可以生成 URL 以便人們可以訪問(wèn)你剛起步的 API。在文本編輯器中打開(kāi) urls.py
并將默認(rèn)示例代碼替換為以下代碼:
from django.urls import include, pathfrom rest_framework import routersfrom tutorial.quickstart import views router = routers.DefaultRouter()router.register(r'users', views.UserViewSet)router.register(r'groups', views.GroupViewSet) # 使用自動(dòng)路由 URL# 還有登錄 URLurlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))]
這個(gè)示例項(xiàng)目的設(shè)置模塊存儲(chǔ)在 tutorial/settings.py
中,因此在文本編輯器中將其打開(kāi),然后在 INSTALLED_APPS
列表的末尾添加 rest_framework
:
INSTALLED_APPS = [ ... 'rest_framework',]
現(xiàn)在,你可以測(cè)試構(gòu)建的 API。首先,從命令行啟動(dòng)內(nèi)置服務(wù)器:
$ python3 manage.py runserver
你可以通過(guò)使用 curl
導(dǎo)航至 URL http://localhost:8000/users
來(lái)訪問(wèn) API:
$ curl --get http://localhost:8000/users/?format=json[{"url":"http://localhost:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]
使用 Firefox 或你選擇的開(kāi)源瀏覽器:
一個(gè)簡(jiǎn)單的 Django API
有關(guān)使用 Django 和 Python 的 RESTful API 的更多深入知識(shí),參考出色的 Django 文檔。
Django 的主要優(yōu)點(diǎn):
Django 社區(qū)的規(guī)模正在不斷擴(kuò)大,因此即使你做一個(gè)復(fù)雜項(xiàng)目,也會(huì)有大量的指導(dǎo)資源。
默認(rèn)包含模板、路由、表單、身份驗(yàn)證和管理工具等功能,你不必尋找外部工具,也不必?fù)?dān)心第三方工具會(huì)引入兼容性問(wèn)題。
用戶、循環(huán)和條件的簡(jiǎn)單結(jié)構(gòu)使你可以專注于編寫(xiě)代碼。
這是一個(gè)成熟且經(jīng)過(guò)優(yōu)化的框架,它非常快速且可靠。
Django 的主要缺點(diǎn):
Django 很復(fù)雜!從開(kāi)發(fā)人員視角的角度來(lái)看,它可能比簡(jiǎn)單的框架更難學(xué)。
Django 有一個(gè)很大的生態(tài)系統(tǒng)。一旦你熟悉它,這會(huì)很棒,但是當(dāng)你深入學(xué)習(xí)時(shí),它可能會(huì)令人感到無(wú)所適從。
感謝各位的閱讀!關(guān)于“怎么借助Django來(lái)編寫(xiě)一個(gè)Python Web API”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!