注意:这是REST框架的version 3的文档。 版本2的文档也可用。


Django REST Framework

Django REST Framework

Django REST框架是一个用于构建Web API的功能强大且灵活的工具包。

您可能想要使用REST框架的一些原因:


资助

REST框架是一个协作资助的项目 如果您在商业环境中使用REST框架,我们强烈建议您通过注册付费计划来投资持续开发

每一次注册都有助于我们使REST框架在财务上长期可持续。

非常感谢所有我们的赞助商,特别是我们的高级支持者,Rover, Sentry, Stream, Machinalis, Rollbar, 和 Cadre


依赖包

REST框架需要以下内容:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.10, 1.11, 2.0)

以下软件包是可选的:

安装

使用pip进行安装,包括您想要的任何可选软件包...

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

...或从github克隆项目。

git clone git@github.com:encode/django-rest-framework.git

'rest_framework'添加到您的INSTALLED_APPS设置中。

INSTALLED_APPS = (
    ...
    'rest_framework',
)

如果您打算使用可浏览的API,您可能还需要添加REST框架的登录和注销视图。 将以下内容添加到根urls.py文件中。

urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]

请注意,URL路径可以是任何你想要的。

例子

我们来看看使用REST框架构建简单模型支持的API的简单示例。

我们将创建一个读写API来访问我们项目用户的信息。

REST框架API的任何全局设置都保存在名为REST_FRAMEWORK的单个配置字典中。 首先将settings.py模块加入以下内容:

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

不要忘记确保你还在INSTALLED_APPS中添加了rest_framework

我们准备好现在创建我们的API。 这是我们项目的根urls.py模块:

from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'is_staff')

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

您现在可以在http://127.0.0.1:8000/浏览器中打开API,并查看新的'用户'API。 如果您使用右上角的登录控件,您还可以从系统添加,创建和删除用户。

Quickstart

迫不及待想开始? 快速入门指南是启动和运行以及使用REST框架构建API的最快方式。

Tutorial

本教程将引导您了解组成REST框架的构建块。 这需要一段时间才能完成,但它会让您全面了解所有内容如何组合在一起,并且极力推荐阅读。

完成的教程API有一个实时示例API用于测试目的,可在此处获取

API Guide

API指南是REST框架提供的所有功能的完整参考手册。

Topics

使用REST框架的一般指南。

Development

有关如何克隆存储库,运行测试套件并将更改返回给REST框架的信息,请参阅贡献准则

技术支持

For support please see the REST framework discussion group, try the #restframework channel on irc.freenode.net, search the IRC archives, or raise a question on Stack Overflow, making sure to include the 'django-rest-framework' tag.

For priority support please sign up for a professional or premium sponsorship plan.

For updates on REST framework development, you may also want to follow the author on Twitter.

Security

If you believe you’ve found something in Django REST framework which has security implications, please do not raise the issue in a public forum.

Send a description of the issue via email to rest-framework-security@googlegroups.com. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.

License

Copyright (c) 2011-2017, Tom Christie All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.