快速開(kāi)始-DRF(Django REST framework)中文文檔

返回目錄
我們將創(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/
quickstart.png

如果您直接使用瀏覽器工作朝氓,確保您通過(guò)上方右側(cè)的入口登錄魔市。
太棒了,非常簡(jiǎn)單吧!
如果您想對(duì)REST framework是如何協(xié)同工作的有進(jìn)一步的了解赵哲,請(qǐng)移步到我們的教程待德,或者開(kāi)始瀏覽API指南。
Documents : the tutorial
API指南: API guide

下一節(jié): 教程1-序列化(Serialization)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枫夺,一起剝皮案震驚了整個(gè)濱河市将宪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橡庞,老刑警劉巖较坛,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扒最,居然都是意外死亡丑勤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)扼倘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)确封,“玉大人,你說(shuō)我怎么就攤上這事再菊∽Υ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵纠拔,是天一觀的道長(zhǎng)秉剑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)稠诲,這世上最難降的妖魔是什么侦鹏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮臀叙,結(jié)果婚禮上略水,老公的妹妹穿的比我還像新娘。我一直安慰自己劝萤,他們只是感情好渊涝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般跨释。 火紅的嫁衣襯著肌膚如雪胸私。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天鳖谈,我揣著相機(jī)與錄音岁疼,去河邊找鬼。 笑死缆娃,一個(gè)胖子當(dāng)著我的面吹牛捷绒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贯要,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疙驾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了郭毕?” 一聲冷哼從身側(cè)響起它碎,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎显押,沒(méi)想到半個(gè)月后扳肛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乘碑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年挖息,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兽肤。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡套腹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出资铡,到底是詐尸還是另有隱情电禀,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布笤休,位于F島的核電站尖飞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏店雅。R本人自食惡果不足惜政基,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闹啦。 院中可真熱鬧沮明,春花似錦、人聲如沸窍奋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至摧扇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挚歧,已是汗流浹背扛稽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滑负,地道東北人在张。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像矮慕,于是被迫代替她去往敵國(guó)和親帮匾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 已經(jīng)同步到gitbook痴鳄,想閱讀的請(qǐng)轉(zhuǎn)到gitbook: Django 1.10 中文文檔 Writing you...
    leyu閱讀 640評(píng)論 1 1
  • 切換到創(chuàng)建項(xiàng)目的目錄 cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為pr...
    在努力中閱讀 3,273評(píng)論 2 3
  • 1瘟斜、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,980評(píng)論 3 119
  • Amily , 來(lái)自圈媽講堂正面管教PD26班 【實(shí)錄】 下午放學(xué)后,兒子說(shuō)餓了痪寻,給他準(zhǔn)備了點(diǎn)零食螺句,我就開(kāi)始做飯...
    Amily_0e7c閱讀 258評(píng)論 2 2
  • 今年24歲了,工作也有一年多了橡类,在一個(gè)三線都算不上的小城市里過(guò)著大多數(shù)人眼中的女孩該過(guò)的安穩(wěn)日子蛇尚,我自己也一度認(rèn)為...
    唐恩彩閱讀 230評(píng)論 0 0