快速開始
快速開始
目錄
我們將建立一個簡單的API,以允許管理員使用者檢視和編輯系統中的使用者和組。
專案設定
建立一個名為tutorial
的新Django專案,然後啟動一個名為quickstart
的新應用。
# 建立專案目錄 mkdir tutorial cd tutorial # 建立一個虛擬環境以本地隔離我們的軟體包依賴關係 python3 -m venv env source env/bin/activate # On Windows use `env\Scripts\activate` # 將Django和 Django REST Framework安裝到虛擬環境中 pip install django pip install djangorestframework # 使用單個應用程式設定一個新專案 django-admin startproject tutorial . # 注意最後的一個 '.' cd tutorial django-admin startapp quickstart cd ..
專案佈局應如下所示:
$ pwd <some path>/tutorial $ find . . ./manage.py ./tutorial ./tutorial/__init__.py ./tutorial/quickstart ./tutorial/quickstart/__init__.py ./tutorial/quickstart/admin.py ./tutorial/quickstart/apps.py ./tutorial/quickstart/migrations ./tutorial/quickstart/migrations/__init__.py ./tutorial/quickstart/models.py ./tutorial/quickstart/tests.py ./tutorial/quickstart/views.py ./tutorial/settings.py ./tutorial/urls.py ./tutorial/wsgi.py
在專案目錄中建立應用程式可能看起來很不正常。使用專案的名稱空間可以避免與外部模組的名稱衝突(該主題超出了快速入門的範圍)。
現在,第一次同步資料庫:
python manage.py migrate
我們還將建立一個名為admin
的初始使用者,其密碼為password123
。 在後面的示例中,我們將以該使用者身份進行身份驗證:
python manage.py createsuperuser --email [email protected] --username admin
序列化器
首先,我們將定義一些序列化器。讓我們建立一個名為tutorial/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']
請注意,在本例中,我們使用的是具有HyperlinkedModelSerializer
的超連結關係。您還可以使用主鍵和各種其他關係,但是超連結是一種很好的RESTful設計。
檢視
好的,我們最好再寫一些檢視。 開啟tutorial/quickstart/views.py
並輸入內容。
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API端點,允許使用者檢視或編輯
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API端點,允許組去檢視或編輯
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
我們沒有編寫多個檢視,而是將所有常見行為分組到稱為ViewSets
的類中。
如果需要,我們可以輕鬆地將它們分解為單個檢視,但是使用檢視集可以使檢視邏輯組織得很好並且非常簡潔。
路由
好的,現在讓我們連線API URL。 轉到 tutorial/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路由連線我們的API。
# 此外,我們包括可瀏覽API的登入URL。
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
因為我們使用的是檢視集而不是檢視,所以我們只需為路由器類註冊檢視集即可自動為我們的API生成URL conf。
同樣,如果我們需要對API URL進行更多的控制,我們可以直接使用常規的基於類的檢視,並顯式地編寫URL conf。
最後,我們包括用於可瀏覽API的預設登入和登出檢視。 這是可選的,但如果您的API需要身份驗證並且您想使用可瀏覽的API,則很有用。
分頁
分頁可讓您控制每頁返回多少個物件。要啟用它,請將以下行新增到tutorial/settings.py
:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
設定
將rest_framework
新增到INSTALLED_APPS
。 設定模組將在tutorial/settings.py
中:
INSTALLED_APPS = [
...
'rest_framework',
]
好的,我們做完了。
測試我們的 API
現在,我們準備測試我們構建的API。 讓我們從命令列啟動伺服器。
python manage.py runserver
現在,我們可以使用curl等工具從命令列訪問API:
bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "[email protected]",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
},
{
"email": "[email protected]",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或使用httpie命令列工具:
bash: http -a admin:password123 http://127.0.0.1:8000/users/
HTTP/1.1 200 OK
...
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "[email protected]",
"groups": [],
"url": "http://localhost:8000/users/1/",
"username": "paul"
},
{
"email": "[email protected]",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或直接通過瀏覽器訪問URL http://127.0.0.1:8000/users/
:
如果使用瀏覽器,請確保使用右上角的控制元件登入。
太好了,那很容易!
如果您想更深入地瞭解REST框架如何組合在一起,請繼續閱讀本教程,或者開始瀏覽API指南。