返回目錄
我們將創(chuàng)建允許所有管理員用戶通過(guò)系統(tǒng)來(lái)檢查和編輯用戶與分組的簡(jiǎn)單API。
項(xiàng)目設(shè)置
新建名稱為tutorial
的Django項(xiàng)目脱吱, 之后新建一個(gè)新的名為quickstart
的app苍碟。
創(chuàng)建項(xiàng)目目錄
mkdir tutorial
cd tutorial
創(chuàng)建孤立的虛擬環(huán)境
virtualenv env
source env/bin/activate #在windows中使用 env\Scripts\activate
在虛擬環(huán)境中安裝Django REST framework
pip install django
pip install djangorestframework
創(chuàng)建僅有一個(gè)應(yīng)用的新項(xiàng)目
django-admin.py startproject tutorial . # 注意尾部的 ‘.’ 字符
cd tutorial
django-admin.py startapp quickstart
cd ..
項(xiàng)目目錄看起來(lái)應(yīng)該是這樣:
$ tree
.
├── manage.py
└── tutorial
├── __init__.py
├── quickstart
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── settings.py
├── urls.py
└── wsgi.py
在項(xiàng)目目錄中創(chuàng)建應(yīng)用可能看起來(lái)不太尋常。我們使用項(xiàng)目的命名空間來(lái)防止與外部模塊的沖突(這個(gè)話題已經(jīng)超出了快速開(kāi)始的范圍)。
現(xiàn)在開(kāi)始第一次同步數(shù)據(jù)庫(kù):
python manage.py migrate
我們也需要?jiǎng)?chuàng)建一個(gè)名為nameadmin
的初始用戶躯枢,密碼為password123
, 我們將在我們的例子中驗(yàn)證該用戶。
python manage.py createsuperuser —email admin@example.com -username admin
一旦您已經(jīng)設(shè)置好了數(shù)據(jù)庫(kù)孩灯,并初始化了用戶闺金,并且做好了準(zhǔn)備的話,打開(kāi)應(yīng)用的目錄開(kāi)始編碼吧…
序列化器(Serializers)
首先我們需要定義一些序列化器峰档,讓我們?cè)?code>tutrial/quickstart/目錄下創(chuàng)建serializers.py
文件败匹,它將會(huì)與我們的數(shù)據(jù)表現(xiàn)有關(guān)。
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’)
注意我們?cè)谠摾欣?code>HyperlinkModelSerializer實(shí)現(xiàn)了超鏈接關(guān)聯(lián)讥巡,您也可以使用主鍵關(guān)鍵或者其他的關(guān)聯(lián)掀亩,但是使用超鏈接是符合RESTful的設(shè)計(jì)風(fēng)格的。
視圖(Views)
現(xiàn)在欢顷,我們最好開(kāi)始寫(xiě)一些視圖了槽棍,打開(kāi)tutorial/quickstart/views.py
,開(kāi)始打字吧抬驴。
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)的類(lèi)中炼七,而不是寫(xiě)多個(gè)視圖函數(shù)。
如果需要布持,我們可以很容易的將他分解成單獨(dú)的視圖豌拙,但是使用視圖集將會(huì)使視圖邏輯良好的組織起來(lái), 而且看起來(lái)十分簡(jiǎn)潔题暖。
URLs
好的按傅, 先來(lái)我們開(kāi)始在tutorial/urls.py
中將URL和API連接起來(lái)。
from django.conf.urls import url, include
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)
使用自動(dòng)URL路由連接我們的API
此外胧卤,我們還包含可瀏覽API的登錄URL
urlpatterns = [
url(r’^’, include(router.urls)),
url(r’^api-auth/‘, include(‘rest_framework.urls’, namespace=‘rest_framework’))
]
由于我們使用了視圖集代替了視圖唯绍,我們可以通過(guò)簡(jiǎn)單的將視圖集注冊(cè)到路由類(lèi)來(lái)自動(dòng)生成URL到API的配置。
如前面所說(shuō)枝誊, 如果我們需要對(duì)API和URL更多的控制權(quán)况芒,我們可以很簡(jiǎn)單地轉(zhuǎn)換到常規(guī)的試圖類(lèi),并明確指定URL的配置叶撒。
最后绝骚, 我們包含了默認(rèn)的登錄和退出視圖用于瀏覽API, 這是可選的痊乾,但如果您的API需要身份驗(yàn)證皮壁,并且您想要使用可瀏覽的API時(shí)非常有用椭更。
設(shè)置
在設(shè)置文件tutorial/settings.py
中哪审, 將'rest_framework'
添加到INSTALLED_APPS
中。
INSTALLED_APPS = (
…
‘rest_framework’,
)
好了虑瀑,大功告成湿滓!
測(cè)試我們的API
現(xiàn)在我們已經(jīng)準(zhǔn)備好測(cè)試我們的API了滴须,讓我們通過(guò)命令行啟動(dòng)服務(wù)。
python manage.py runserver
現(xiàn)在已經(jīng)可以進(jìn)入我們的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
:
$ 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”
}
]
}
或者直接通過(guò)瀏覽器瀏覽, 訪問(wèn)URL:http://127.0.0.1:8000/users/
如果您直接使用瀏覽器工作朝氓,確保您通過(guò)上方右側(cè)的入口登錄魔市。
太棒了,非常簡(jiǎn)單吧!
如果您想對(duì)REST framework是如何協(xié)同工作的有進(jìn)一步的了解赵哲,請(qǐng)移步到我們的教程待德,或者開(kāi)始瀏覽API指南。
Documents : the tutorial
API指南: API guide
下一節(jié): 教程1-序列化(Serialization)