文档章节

Django-REST-framework教程中文版

银月光海
 银月光海
发布于 2017/05/18 17:03
字数 819
阅读 317
收藏 0

快速入门

在这里我们创建一个简单的API,让管理员查看、编辑用户和组信息。

项目设置

新建名为tutorial的django项目并在其中建立一个名为quickstart的APP:

# 新建目录
mkdir tutorial
cd tutorial

# 新建虚拟环境
virtualenv env
source env/bin/activate  # Windows使用 `env\Scripts\activate`

# 在虚拟环境中安装依赖
pip install django
pip install djangorestframework

# 新建项目
django-admin.py startproject tutorial .  # 注意后面的 '.'
cd tutorial
django-admin.py startapp quickstart
cd ..

使用下面的命令创建表:

python manage.py migrate

然后创建一个用户名为admin密码password123的管理员:

python manage.py createsuperuser

以上设置完成后,进入APP的目录来编写代码...

序列化

首先我们创建一个文件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来建立超链接关系,你也可以使用主键或其他关系,但hyperlinking是一个好的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):
    """
    查看、编辑用户的界面
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    查看、编辑组的界面
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

我们把许多常见的操作都封装在了类ViewSets中,这样就不用编写重复代码了。当然你可以按照自己的需求编写view,但使用ViewSets可以保持view代码的简洁以及逻辑的清晰。

URLs

接下来编写tutorial/urls.py

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
# 另外添加登录相关的URL
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因为我们使用了ViewSets,所以我们可以通过使用Router类来自动生成URL配置信息。

重申一次,如果需要更自主的配置URL,可以使用常规的类视图以及显式编写URL配置。

最后我们添加了默认的登录、登出视图在浏览API时候使用,这是一个可选项,但如果你想在浏览API时使用认证功能这是非常有用的。

Settings

我们还需要进行一些全局设置。我们想启用分页功能以及只有管理员能访问,编辑tutorial/settings.py

INSTALLED_APPS = (
    ...
    'rest_framework',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
    'PAGE_SIZE': 10
}

至此,我们完成了全部工作。

测试

现在我们来测试我们的API,在终端中输入:

python ./manage.py runserver

现在我们可以使用命令行工具访问API了,比如curl:

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"
        }
    ]
}

或者直接打开浏览器: 如果使用浏览器,请确保已经使用右上角的登录功能登录。

好极了,就是这么简单!

本文转载自:https://darkcooking.gitbooks.io/django-rest-framework-cn/content/chapter0.html

银月光海

银月光海

粉丝 37
博文 365
码字总数 46223
作品 0
浦东
项目经理
私信 提问
开篇:HelloDjango!Django全栈开发系列教程

HelloDjango!Django全栈开发系列教程 欢迎 追梦 入伙 HelloGitHub-Team,同时为我们带来了完全免费的 HelloDjango 系列教程,全网首发于 HelloGitHub 公众号。让想你的系列文章被跟多人看到...

HelloGitHub
07/22
0
0
Django REST framework的各种技巧【目录索引】

为了防止各位看同学不好找,在这边丢了个目录过来,因为以后可能继续写 目录 Django REST framework的各种技巧——1.基础讲解 Django REST framework的各种技巧——2.serializer Django RES...

D咄咄
2017/11/29
0
0
开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技
2017/12/11
0
0
Django REST framework的各种技巧【目录索引】

为了防止各位看同学不好找,在这边丢了个目录过来,因为以后可能继续写 目录 [Django REST framework的各种技巧——1.基础讲解][1] [Django REST framework的各种技巧——2.serializer][2] ...

duoduo3_69
2016/02/01
574
0
免费的编程中文书籍索引【收藏速度】

语言无关类 优质博客 PyTab在线手册中心 ImportNew 廖雪峰的官方网站 程序员博客墙 操作系统 开源世界旅行手册 鸟哥的Linux私房菜 Linux 系统高级编程 The Linux Command Line (中英文版) L...

yonghu86
2015/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配

请实现一个函数用来匹配包括 '.' 和 '*' 的正则表达式。模式中的字符 '.' 表示任意一个字符,而 '*' 表示它前面的字符可以出现任意次(包含 0 次)。 在本题中,匹配是指字符串的所有字符匹配...

Garphy
52分钟前
5
0
Laravel 5.1的多路由文件的配置

默认的路由配置文件只有一个, \app\Http\routes.php。 在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件。 找到加载\app\Http\routes.php的文件, 打开\app\Provid...

mdoo
今天
5
0
Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Obj...

honeymoose
今天
6
0
聊聊nacos ServiceManager的UpdatedServiceProcessor

序 本文主要研究一下nacos ServiceManager的UpdatedServiceProcessor ServiceManager.init nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @Compone......

go4it
今天
7
0
正则表达式的使用(QQ格式的判断与空格的切割)

//正则表达式的使用 public static void main(String[] args) throws IOException, ClassNotFoundException { //test1("123456"); test2("-1 99 kk"); } /** * ......

zhengzhixiang
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部