我们将创建一个简单的API,让管理员用户能查看,修改系统中的用户和组。

项目搭建

创建一个新的Django项目,叫做 tutorial,然后开始一个新的app叫做 quickstart

# 创建项目的目录
mkdir tutorial
cd tutorial# 创建一个虚拟环境(virtualenv),来隔离地搭依赖包(开发环境)
virtualenv env
source env/bin/activate  # 在windows环境下,我们使用`env\Scripts\activate`# 安装Django 和 Django REST framework 到虚拟环境(virtualenv)中
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的目录,然后开始编程啦……

序列器(Serializers)

首先,我们来定义一些序列器。我们来创建一个新的模块(module)叫做 tutorial/quickstart/serializers.py ,这是我们用来描述数据是如何呈现的。

from django.contrib.auth.models import User, Group
from rest_framework import serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Userfields = ('url', 'username', 'email', 'groups')class GroupSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Groupfields = ('url', 'name')

需要注意的是,我们在这个案例中,使用了超链接关系(hyperlinked relations),借助的类是 HyperlinkedModelSerializer。你也可以使用主键(primary key)和其它一些关系型(relationships),但超链接(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, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):"""API端:允许查看和编辑用户"""queryset = User.objects.all().order_by('-date_joined')serializer_class = UserSerializerclass GroupViewSet(viewsets.ModelViewSet):"""API端:允许查看和编辑组"""queryset = Group.objects.all()serializer_class = GroupSerializer

比起传统的做法,需要写很多视图,我们将所有的一般性行为(common behavior)组成一个 ViewSets 类。
如有需要,我们可很轻易的将其,拆分成数个单独的视图。但视图组(viewsets)能让视图的逻辑结构清晰,而且简洁。

URLs

好,现在我们来装配API的URLs。进入 tutorial/urls.py

from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import viewsrouter = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)# 使用自动化URL路由,转配我们的API.
# 如有额外需要, 我也为可视化API添加了登陆URLs.
urlpatterns = [url(r'^', include(router.urls)),url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因为我们用了视图组(viewsets)而不是多个视图,我们可以为我们的API自动的生成URL配置,只需简单的将视图组(viewsets)注册到router类中即可。

同样的,如果我们需要对API URLs进行单独控制,我们可以使用普通基于类(class based)的视图,并详细的配置每个URL。

最后,我们为可视化API,添加登陆/登出视图。这是可选的,但对于需要登陆验证的API,以及可视化的API却是非常的有用。

设置(Settings)

我们也需要一些全局设置。我们想要分页(pagination),我们希望API只对管理用户开发。设置模块会在 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

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

如果你借助浏览器,请确保你在右上角的入口,进行了登陆。

转载于:https://www.cnblogs.com/ccorz/p/Django-REST-framework-de-kuai-su-ru-men-jiao-cheng.html

Django REST framework 的快速入门教程相关推荐

  1. [转]Django REST framework 简介与中文教程

    Django REST framework 简介与中文教程 简介 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的. 在开发REST AP ...

  2. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  3. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  4. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  5. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程

    指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 ​1.4.2  指示灯组 指示灯组的放大图如图1.5所示. 图1.5  指示灯组 各个指示灯对应的功能如下: q  RX:对应于0号端口 ...

  6. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  7. Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程

    Arduino Yun的主要部件介绍 1.4.1  主要部件 Yun的主要部件如图1.4所示. 图1.4  Arduino Yun的主要部件 在Yun小小的板子上集成了两颗处理器.一个是ATmega3 ...

  8. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  9. OUYA游戏开发快速入门教程1.2OUYA的硬件规格

    OUYA游戏开发快速入门教程1.2OUYA的硬件规格 从官网上购买回来的OUYA产品,包含游戏主机.游戏控制杆.说明书.电源线.HDMI线.电源线和电池,如图1-2所示.本节就来简要介绍下,游戏主机和 ...

最新文章

  1. go爬取json_Python爬取百度文库学习
  2. 【分享】Maven插件的源码下载(SVN)
  3. 005 定位控件输入call
  4. XSS:RPO(Relative Path Overwrite)攻击
  5. Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time)...
  6. 字节流写数据搭配异常处理
  7. MySQL中使用SQL语句对字段进行重命名
  8. 【元胞自动机】基于matlab元胞自动机甲板火灾下人群疏散【含Matlab源码 1291期】
  9. Tekla二次开发 第4节 曲梁及双截面梁
  10. Chrome的YouTube双语字幕插件
  11. oracle基础|什么是数据字典|数据字典的作用
  12. 使用Cisco Packet Tracer之图解无线网络全网互联
  13. 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...
  14. 如何将单线程爬虫改成多线程
  15. 什么是 95计费方式
  16. Linux设备驱动——第三章字符驱动
  17. go timer和ticker使用方式
  18. golang最适合(擅长)做什么
  19. vxlan专题---第四章配置分布式网关部署方式的华为VXLAN示例-外部路由type5
  20. android 查看设备 x86,有了它 x86安卓设备就能用Windows软件了

热门文章

  1. 【转载】浏览器测试工具有哪些 浏览器安全性能内核兼容测试工具推荐
  2. Docker Networking Data Volume
  3. 4G、5G难配物联网 hold不住也得死撑
  4. 数据港:专业数据中心服务提供商
  5. Sunday算法模板
  6. 为你的 Swift Packages 命名
  7. python 轻量级邮件发送库
  8. Twips 缇的含义[来自网络]
  9. ubuntu linux 使用常见问题
  10. 新浪微博***事件分析