快速开始-DRF(Django REST framework)中文文档

返回目录
我们将创建允许所有管理员用户通过系统来检查和编辑用户与分组的简单API。

项目设置

新建名称为tutorial的Django项目, 之后新建一个新的名为quickstart的app。

创建项目目录

mkdir tutorial
cd tutorial

创建孤立的虚拟环境

virtualenv env
source env/bin/activate  #在windows中使用 env\Scripts\activate

在虚拟环境中安装Django REST framework

pip install django
pip install djangorestframework

创建仅有一个应用的新项目

django-admin.py startproject tutorial . # 注意尾部的 ‘.’ 字符
cd tutorial
django-admin.py startapp quickstart
cd ..

项目目录看起来应该是这样:

$ 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

在项目目录中创建应用可能看起来不太寻常。我们使用项目的命名空间来防止与外部模块的冲突(这个话题已经超出了快速开始的范围)。
现在开始第一次同步数据库:
python manage.py migrate
我们也需要创建一个名为nameadmin的初始用户,密码为password123, 我们将在我们的例子中验证该用户。

python manage.py createsuperuser —email admin@example.com -username admin

一旦您已经设置好了数据库,并初始化了用户,并且做好了准备的话,打开应用的目录开始编码吧…

序列化器(Serializers)

首先我们需要定义一些序列化器,让我们在tutrial/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’)

注意我们在该例中利用HyperlinkModelSerializer实现了超链接关联,您也可以使用主键关键或者其他的关联,但是使用超链接是符合RESTful的设计风格的。

视图(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)的类中,而不是写多个视图函数。
如果需要,我们可以很容易的将他分解成单独的视图,但是使用视图集将会使视图逻辑良好的组织起来, 而且看起来十分简洁。

URLs

好的, 先来我们开始在tutorial/urls.py中将URL和API连接起来。

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)

使用自动URL路由连接我们的API

此外,我们还包含可浏览API的登录URL

urlpatterns = [
    url(r’^’, include(router.urls)),
    url(r’^api-auth/‘, include(‘rest_framework.urls’, namespace=‘rest_framework’))
]

由于我们使用了视图集代替了视图,我们可以通过简单的将视图集注册到路由类来自动生成URL到API的配置。
如前面所说, 如果我们需要对API和URL更多的控制权,我们可以很简单地转换到常规的试图类,并明确指定URL的配置。
最后, 我们包含了默认的登录和退出视图用于浏览API, 这是可选的,但如果您的API需要身份验证,并且您想要使用可浏览的API时非常有用。

设置

在设置文件tutorial/settings.py中, 将'rest_framework'添加到INSTALLED_APPS中。

INSTALLED_APPS = (
    …
    ‘rest_framework’,
)

好了,大功告成!

测试我们的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:
$ 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”
        }
    ]
}
或者直接通过浏览器浏览, 访问URL:http://127.0.0.1:8000/users/
quickstart.png

如果您直接使用浏览器工作,确保您通过上方右侧的入口登录。
太棒了,非常简单吧!
如果您想对REST framework是如何协同工作的有进一步的了解,请移步到我们的教程,或者开始浏览API指南。
Documents : the tutorial
API指南: API guide

下一节: 教程1-序列化(Serialization)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容