如何藉助 Django 來編寫一個 Python Web API
Django 是 Python API 開發中最流行的框架之一,在這個教程中,我們來學習如何使用它。
Django 所有 Web 框架中最全面的,也是最受歡迎的一個。自 2005 年以來,其流行度大幅上升。
Django 是由 Django 軟體基金會維護,並且獲得了社群的大力支援,在全球擁有超過 11,600 名成員。在 Stack Overflow 上,約有 191,000 個帶 Django 標籤的問題。Spotify、YouTube 和 Instagram 等都使用 Django 來構建應用程式和資料管理。
本文演示了一個簡單的 API,通過它可以使用 HTTP 協議的 GET 方法來從伺服器獲取資料。
構建一個專案
首先,為你的 Django 應用程式建立一個目錄結構,你可以在系統的任何位置建立:
$ mkdir myproject
$ cd myproject
然後,在專案目錄中建立一個虛擬環境來隔離本地包依賴關係:
$ python3 -m venv env
$ source env/bin/activate
在 Windows 上,使用命令 env\Scripts\activate
來啟用虛擬環境。
安裝 Django 和 Django REST framework
然後,安裝 Django 和 Django REST 模組:
$ pip3 install django
$ pip3 install djangorestframework
例項化一個新的 Django 專案
現在你的應用程式已經有了一個工作環境,你必須例項化一個新的 Django 專案。與 Flask 這樣微框架不同的是,Django 有專門的命令來建立(注意第一條命令後的 .
字元)。
$ django-admin startproject tutorial .
$ cd tutorial
$ django-admin startapp quickstart
Django 使用資料庫來管理後端,所以你應該在開始開發之前同步資料庫,資料庫可以通過 manage.py
指令碼管理,它是在你執行 django-admin
命令時建立的。因為你現在在 tutorial
目錄,所以使用 ../
符號來執行指令碼,它位於上一層目錄:
$ python3 ../manage.py makemigrations
No changes detected
$ python3 ../manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running 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
在 Django 中建立使用者
建立一個名為 admin
,示例密碼為 password123
的初始使用者:
$ python3 ../manage.py createsuperuser \
--email admin@example.com \
--username admin
在提示時建立密碼。
在 Django 中實現序列化和檢視
為了使 Django 能夠將資訊傳遞給 HTTP GET 請求,必須將資訊物件轉化為有效的響應資料。Django 為此實現了“序列化類” serializers
。
在你的專案中,建立一個名為 quickstart/serializers.py
的新模組,使用它來定義一些序列化器,模組將用於資料展示:
from django.contrib.auth.models import User, Group
from 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 中的檢視是一個接受 Web 請求並返回 Web 響應的函式。響應可以是 HTML、HTTP 重定向、HTTP 錯誤、JSON 或 XML 文件、影象或 TAR 檔案,或者可以是從 Internet 獲得的任何其他內容。要建立檢視,開啟 quickstart/views.py
並輸入以下程式碼。該檔案已經存在,並且其中包含一些示例文字,保留這些文字並將以下程式碼新增到檔案中:
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from 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
使用 Django 生成 URL
現在,你可以生成 URL 以便人們可以訪問你剛起步的 API。在文字編輯器中開啟 urls.py
並將預設示例程式碼替換為以下程式碼:
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# 使用自動路由 URL
# 還有登入 URL
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
調整你的 Django 專案設定
這個示例專案的設定模組儲存在 tutorial/settings.py
中,因此在文字編輯器中將其開啟,然後在 INSTALLED_APPS
列表的末尾新增 rest_framework
:
INSTALLED_APPS = [
...
'rest_framework',
]
測試 Django API
現在,你可以測試構建的 API。首先,從命令列啟動內建伺服器:
$ python3 manage.py runserver
你可以通過使用 curl
導航至 URL http://localhost:8000/users
來訪問 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 或你選擇的開源瀏覽器:
有關使用 Django 和 Python 的 RESTful API 的更多深入知識,參考出色的 Django 文件。
為什麼要使用 Djago?
Django 的主要優點:
- Django 社群的規模正在不斷擴大,因此即使你做一個複雜專案,也會有大量的指導資源。
- 預設包含模板、路由、表單、身份驗證和管理工具等功能,你不必尋找外部工具,也不必擔心第三方工具會引入相容性問題。
- 使用者、迴圈和條件的簡單結構使你可以專注於編寫程式碼。
- 這是一個成熟且經過優化的框架,它非常快速且可靠。
Django 的主要缺點:
- Django 很複雜!從開發人員視角的角度來看,它可能比簡單的框架更難學。
- Django 有一個很大的生態系統。一旦你熟悉它,這會很棒,但是當你深入學習時,它可能會令人感到無所適從。
對你的應用程式或 API 來說,Django 是絕佳選擇。下載並熟悉它,開始開發一個迷人的專案!
via: https://opensource.com/article/19/11/python-web-api-django
作者:Rachel Waston 選題:lujun9972 譯者:MjSeven 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- 如何使用 Flask 編寫 Python Web APIFlaskPythonWebAPI
- 如何快速編寫一個微信Api?API
- 如何使用 Pyramid 和 Cornice 編寫 Python Web APIPythonWebAPI
- 使用python的scrapy來編寫一個爬蟲Python爬蟲
- 使用PyQt來編寫第一個Python GUI程式QTPythonGUI
- 藉助 SublimeLinter 編寫高質量的 JS & CSS 程式碼JSCSS
- 藉助SublimeLinter編寫高質量的JavaScript & CSS程式碼JavaScriptCSS
- 如何藉助前端表格控制元件設計一個流程圖前端控制元件流程圖
- 如何使用Python編寫一個Lisp直譯器PythonLisp
- 如何編寫一個React元件React元件
- 從零開始編寫一個 Python 非同步 ASGI WEB 框架Python非同步Web框架
- 如何藉助 HealthKit 打造一款健身應用?
- Netty 實戰:如何編寫一個麻小俱全的 web 容器NettyWeb
- 5 個用 Python 編寫 web 爬蟲的方法PythonWeb爬蟲
- 如何編寫一個Jquery外掛jQuery
- 編寫了一個輔助Flutter彈出Toast的PackageFlutterASTPackage
- 研發團隊如何藉助Gitlab來做程式碼reviewGitlabView
- 在Windows下編寫並執行第一個ASP.NET 5 Preview Web API程式WindowsASP.NETViewWebAPI
- 為 Python Web App 編寫 DockerfilesPythonWebAPPDocker
- 藉助 HTTP/2 打造更迅捷的 Web 體驗HTTPWeb
- 如何編寫優質的API文件API
- 藉助ai來分析程式碼,理解程式碼AI
- 如何在 Android 上藉助 Wine 來執行 Windows AppsAndroidWindowsAPP
- 如何編寫一個可複用元件元件
- 如何編寫一個Perl爬蟲程式爬蟲
- 如何編寫一個 Redux 中介軟體Redux
- 實戰:如何編寫一個 OpenTelemetry Extensions
- 如何使用Flask編寫一個網站Flask網站
- 如何編寫python模組Python
- 藉助機器學習提高CRISPR基因編輯準確率機器學習
- 使用Node.js原生API寫一個web伺服器Node.jsAPIWeb伺服器
- 如何藉助 NoSQL 提高 JPA 應用效能SQL
- 選擇一個 Python Web 框架:Django vs Flask vs PyramidPythonWeb框架DjangoFlask
- 快用Django REST framework寫寫API吧DjangoRESTFrameworkAPI
- 用Python寫一個簡單的Web框架PythonWeb框架
- Python(一)Android藉助Python實現打包自動上傳firPythonAndroid
- 藉助查詢引數來利用 Laravel 快取Laravel快取
- 如何編寫一個 Pulsar Broker Interceptor 外掛