1.11.21.31.41.51.61.71.8Table of Contents介绍第零章-快速入门第一章-序列化第二章-Requests和Responses第三章-类视图第四章-认证和权限第五章-Relationships和Hyperlinked第六章-ViewSets和Routers1Django-REST-framework教程中文版django-rest-framework,是一套基于Django的REST框架,目前仅计划翻译教程部分,至于API部分时间充足的话也会进行翻译。本文仅是个人阅读文档的产物,不准确的地方还请大家指正。另外各位看官请注意,本文基于Django1.9以及restframework-v3.3.3版本,很可能您阅读本文时候官网文档已经产生变化了。更多翻译文章、技术文章请移步本人博客。2016-06-24介绍2快速入门在这里我们创建一个简单的API,让管理员查看、编辑用户和组信息。项目设置新建名为 tutorial 的django项目并在其中建立一个名为 quickstart 的APP:# 新建目录mkdir tutorialcd tutorial# 新建虚拟环境virtualenv envsource env/bin/activate # Windows使用 `env\Scripts\activate`# 在虚拟环境中安装依赖pip install djangopip install djangorestframework# 新建项目django-admin.py startproject tutorial . # 注意后面的 '.'cd tutorialdjango-admin.py startapp quickstartcd ..使用下面的命令创建表:python manage.py migrate然后创建一个用户名为 admin 密码 password123 的管理员:python manage.py createsuperuser以上设置完成后,进入APP的目录来编写代码...第零章-快速入门3序列化首先我们创建一个文件 tutorial/quickstart/serializers.py 来编写序列化相关的代码:from django.contrib.auth.models import User, Groupfrom rest_framework import serializersclass 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 :第零章-快速入门4from django.contrib.auth.models import User, Groupfrom rest_framework import viewsetsfrom tutorial.quickstart.serializers import UserSerializer, GroupSerializerclass UserViewSet(viewsets.ModelViewSet): 查看、编辑用户的界面 queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializerclass GroupViewSet(viewsets.ModelViewSet): 查看、编辑组的界面 queryset = Group.objects.all() serializer_class = GroupSerializer我们把许多常见的操作都封装在了类 ViewSets 中,这样就不用编写重复代码了。当然你可以按照自己的需求编写view,但使用 ViewSets 可以保持view代码的简洁以及逻辑的清晰。URLs接下来编写 tutorial/urls.py :第零章-快速入门5from django.conf.urls import url, includefrom rest_framework import routersfrom tutorial.quickstart import viewsrouter = routers.DefaultRouter()router.register(r'users', views.UserViewSet)router.register(r'groups', views.GroupViewSet)# 使用URL路由来管理我们的API# 另外添加登录相关的URLurlpatterns = [ 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 :第零章-快速入门6INSTALLED_APPS = ( ... 'rest_framework',)REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 'PAGE_SIZE': 10}至此,我们完成了全部工作。测试现在我们来测试我们的API,在终端中输入:python ./manage.py runserver现在我们可以使用命令行工具访问API了,比如 curl :第零章-快速入门7curl -H 'Accept: application/json; indent=4' -u admin:password123 { count: 2, next: null, previous: null, results: [ { email: admin@example.com, groups: [], url: username: admin }, { email: tom@example.com, groups: [ ], url: username: tom } ]}或者 httpie 第零章-快速入门8http -a admin:password123 200 OK...{ count: 2, next: null, previous: null, results: [ { email: admin@example.com, groups: [], url: username: paul }, { email: tom@example.com, groups: [ ], url: username: tom } ]}第零章-快速入门9或者直接打开浏览器: 如果使用浏览器,请确保已经使用右上角的登录功能登录。好极了,就是这么简单!第零章-快速入门10教程1:序列化在这个教程中将创建一个支持代码高亮展示的API。我们会介绍组成RESTframework的各个组件,并且让你明白这些组件是如何相互协作的。 这篇教程会比较深入,所以开始之前你应该准备好零食和啤酒。如果你仅仅想大概了解,请看快速入门。提示:这篇教程的源码可以在tomchristie/rest-framework-tutorial找到,也提供了在线版供大家测试,请点击这里。设置一个新虚拟环境首先我们使用 virtualenv 创建一个虚拟环境,这样可以很好的和其他项目隔离所需的依赖库:virtualenv envsource env/bin/activate然后在虚拟环境中安装需要的依赖:pip install djangopip install djangorestframeworkpip install pygments # 这个用于语法高亮注意使用 deactive 来退出虚拟环境,更多信息请看virtualenv文档。开始首先我们来创建一个新项目:第一章-序列化11cd ~django-admin.py startproject tutorialcd tutorial接下来创建一个APP:python manage.py startapp snippets然后编辑 tutorial/settings.py ,把我们的 snippets 和 rest_framework 添加到 INSTALLED_APPS :INSTALLED_APPS = ( ... 'rest_framework', 'snippets.apps.SnippetsConfig',)创建Model首先我们创建一个 Snippet 模型来存储代码片段。注意:写注释是一个好编程习惯,不过为了专注于代码本身,我们在下面省略了注释。编辑 snippets/models.py :第一章-序列化12from django.db import modelsfrom pygments.lexers import get_all_lexersfrom pygments.styles import get_all_stylesLEXERS = [item for item in get_all_lexers() if item[1]]LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in