Django REST framework快速入門(官方文檔翻譯翻譯)

開始

咱們將建立一個簡單的API來容許管理員用戶查看和編輯系統中的用戶和組。python

項目設置

建立一個新的django項目,命名爲:<tutorial>,而後建立一個新的應用程序(app),命名爲:<quickstart>。web

# Create the project directory數據庫

mkdir tutorialdjango

cd tutorialjson

 

# Create a virtual environment to isolate our package dependencies locallyapi

python3 -m venv env瀏覽器

source env/bin/activate  # On Windows use `env\Scripts\activate`bash

 

# Install Django and Django REST framework into the virtual environmentapp

pip install djangocurl

pip install djangorestframework

 

# Set up a new project with a single application

django-admin startproject tutorial .  # Note the trailing '.' character

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 admin@example.com --username admin

 

當你設置好數據庫,初始用戶建立完成後,打開應用程序<quickstart>目錄,而後就能夠開始寫代碼啦~

序列化工具(Serializers)

第一步咱們將定義一些序列化工具(serializers)。讓咱們建立一個新的模塊。命名爲:<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']

 

注意咱們如今使用的序列化工具<UserSerializer>和<GroupSerializer>都繼承至<HyperlinkedModelSerializer>這個父類。這個父類容許咱們以超連接的方式來描述數據表之間的關係。你也可使用主鍵<primary key>或者其餘方式來關聯數據表之間的關係,可是使用超連接這種設計方式是很是符合RESTful1設計的。

視圖(Views)

第二步。咱們須要搞定視圖部分了。打開<tutorial/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 endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
 
 
class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

 

咱們經過類<ViewSets>這個類,將視圖函數中功能一致的部分都整合到一塊兒。這樣就不須要寫不少的視圖函數了。

固然, 在一些須要自定義的狀況下咱們也能夠輕易地將整合好的視圖分離,可是使用<ViewSets>可讓咱們的邏輯整理的更加清晰同時代碼也更加簡潔。

路由設置(URLs)

接下來咱們該設置咱們的API路由了。打開<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)
 
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

 

由於咱們使用<ViewSets>實例替代了原始的視圖,這讓咱們能夠經過在<DefaultRouter>的實例中,中註冊咱們的<ViewSets>實例便可自動地爲咱們生成相應的路由。

固然,若是咱們但願自定義路由使其功能更加豐富,也能夠拋棄這個功能轉而使用普通的基於類的視圖,而後定義路由。

最後一步,將用戶登陸和登出視圖放置在了可瀏覽的API頁面內。這是一個可選擇項,若是你的須要使用可瀏覽的API頁面和用戶管理。

分頁

分頁功能讓你能夠控制每頁顯示多少個對象。要使用它的話請在文件<tutorial/settings.py>內添加如下代碼:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

 

設置

打開設置模塊<tutorial/settings.py>,將<’rest_framework’>添加到<INSTALLED_APPS>。以下:

INSTALLED_APPS = [
    ...
    'rest_framework',
]

 

以上,咱們已經作完了。一個簡單的用戶管理API,而且能夠在瀏覽器上快速訪問,測試的API。看完以上東西你可能會想:」wtf???!!!。這是什麼東西?」。接下來咱們將作一些測試,來幫助你理解。咱們到底作了個什麼的東西。

測試API

如今咱們能夠開始測試剛剛搭建好的API。不過在這以前咱們先定一個小目標,好比先讓程序跑起來。

python manage.py runserver

 

若是小目標沒有實現。請查看錯誤信息,而後翻回去仔細看看代碼。

接下來咱們就能夠訪問咱們的API了。能夠經過命令行訪問,使用curl工具:

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": "admin@example.com",
            "groups": [],
            "url": "http://127.0.0.1:8000/users/1/",
            "username": "admin"
        },
        {
            "email": "tom@example.com",
            "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": "admin@example.com",
            "groups": [],
            "url": "http://localhost:8000/users/1/",
            "username": "paul"
        },
        {
            "email": "tom@example.com",
            "groups": [                ],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}

 

或者直接使用瀏覽器。打開連接:http://127.0.0.1:8000/users/

 

若是你是經過瀏覽器訪問的,你須要在右上角登陸。由於這個管理工具是給admin用的。遊客沒法訪問。

若是還要深刻學習和理解REST framework是如何將這些功能一步一步封裝到一塊兒的。請繼續收看以後的指導文章,或者直接閱讀咱們的API。

以上就是本文所有內容,若是你看不懂,那大概須要用django再作幾個小項目來熟悉一下django web應用的業務流程。

相關文章
相關標籤/搜索