Django 是 Python API 開發中最流行的框架之一,在這個教程中,咱們來學習如何使用它。python
Django 全部 Web 框架中最全面的,也是最受歡迎的一個。自 2005 年以來,其流行度大幅上升。linux
Django 是由 Django 軟件基金會維護,而且得到了社區的大力支持,在全球擁有超過 11,600 名成員。在 Stack Overflow 上,約有 191,000 個帶 Django 標籤的問題。Spotify、YouTube 和 Instagram 等都使用 Django 來構建應用程序和數據管理。git
本文演示了一個簡單的 API,經過它可使用 HTTP 協議的 GET 方法來從服務器獲取數據。github
首先,爲你的 Django 應用程序建立一個目錄結構,你能夠在系統的任何位置建立:web
$ mkdir myproject
$ cd myproject
複製代碼
而後,在項目目錄中建立一個虛擬環境來隔離本地包依賴關係:數據庫
$ python3 -m venv env
$ source env/bin/activate
複製代碼
在 Windows 上,使用命令 env\Scripts\activate
來激活虛擬環境。django
而後,安裝 Django 和 Django REST 模塊:json
$ pip3 install django
$ pip3 install djangorestframework
複製代碼
如今你的應用程序已經有了一個工做環境,你必須實例化一個新的 Django 項目。與 Flask 這樣微框架不一樣的是,Django 有專門的命令來建立(注意第一條命令後的 .
字符)。flask
$ django-admin startproject tutorial .
$ cd tutorial
$ django-admin startapp quickstart
複製代碼
Django 使用數據庫來管理後端,因此你應該在開始開發以前同步數據庫,數據庫能夠經過 manage.py
腳本管理,它是在你運行 django-admin
命令時建立的。由於你如今在 tutorial
目錄,因此使用 ../
符號來運行腳本,它位於上一層目錄:後端
$ python3 ../manage.py makemigrations
No changes detected
$ python4 ../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
複製代碼
建立一個名爲 admin
,示例密碼爲 password123
的初始用戶:
$ python3 ../manage.py createsuperuser \
--email admin@example.com \
--username admin
複製代碼
在提示時建立密碼。
爲了使 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
複製代碼
如今,你能夠生成 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'))
]
複製代碼
這個示例項目的設置模塊存儲在 tutorial/settings.py
中,所以在文本編輯器中將其打開,而後在 INSTALLED_APPS
列表的末尾添加 rest_framework
:
INSTALLED_APPS = [
...
'rest_framework',
]
複製代碼
如今,你能夠測試構建的 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 文檔。
Django 的主要優勢:
Django 的主要缺點:
對你的應用程序或 API 來講,Django 是絕佳選擇。下載並熟悉它,開始開發一個迷人的項目!
via: opensource.com/article/19/…
做者:Rachel Waston 選題:lujun9972 譯者:MjSeven 校對:wxy