1. 程式人生 > 實用技巧 >快速開始

快速開始

快速開始

目錄

我們將建立一個簡單的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指南。