跳转到主要内容

Django的HTTP REST工具包

项目描述

简介

Django Restlayer是一个非常简单易用的工具包,用于为您的Django项目或应用创建RESTful API。

功能

  • 允许您在应用程序中尊重HTTP方法和头部。

  • 基于类的资源。

  • 易于编码。

  • 如果需要,可以进行表单验证。

安装

  • 对于Django 1.4: pip install django-restlayer==0.8.5

  • 对于Django 1.5+: pip install django-restlayer

配置

Django Restlayer不需要任何配置,也不需要在INSTALLED_APPS设置中添加任何应用。

简单示例

urls.py

from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^$', 'myapp.resources.simple', name='simple'),
)

myapp/resources.py

from restlayer import Resource, Response

# Our resource class
class SimpleResponse(Response):
    def response_get(self, request):
        return ['foo', 'bar']

# Resource (a callable object or a view if you prefer)
simple = Resource(SimpleResponse)

就这样。现在,查询您的开发服务器

curl -s -v -H "accept:application/json" https://:8000/

> GET /api/ HTTP/1.1
> User-Agent: curl/7.33.0
> Host: localhost
> accept:application/json
>
< HTTP/1.1 200 OK
< Server: nginx/1.4.3
< Date: Thu, 28 Nov 2013 14:34:15 GMT
< Content-Type: application/json; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Language, Cookie
< Content-Language: en
<
[
 "foo",
 "bar"
]

用法

响应类

所有响应都应继承自restlayer.Response类。然后,添加名为response_VERB的方法,其中VERB是HTTP动词。要处理GET响应,需要创建response_get方法,对于POST,创建response_post。每个response_VERB方法都充当一个带有所需参数的视图。基本示例

from restlayer import Response

class SimpleResponse(Response):
    def response_get(self, request, my_id):
        # This method will match a URL pattern with "my_id"
        return "foo"

预定义响应方法

有两种预定义的响应方法

  • response_options 返回一个带有Allow头部的空204响应。

  • response_head 如果存在则调用response_get,并返回不带主体的它。

序列化器

您可以设置 序列化器反序列化器 属性。它们设置数据如何进行序列化(输出)或反序列化(输入)。在本例中,我们为 text/plain 添加了一个愚蠢的序列化器。

class SimpleResponse(Response):
    serializers = Response.serializers + (
      ('text/plain', lambda x: return str(x))
    )

这不太可能很好用,但您应该明白。 序列化器 是一个包含 MIME 类型与可调用对象的元组的列表。可调用对象仅接受数据作为参数。 反序列化器 与接受的数据类型相同(可调用对象仅接受 request 作为参数)。

默认格式为

  • 序列化器
    • application/json

    • application/xml

    • application/python-pickle

  • 反序列化器
    • application/x-www-form-urlencoded

    • multipart/form-data

    • application/json

响应是有效的 HttpResponse 对象

restlayer.Response 实例是有效的 django.http.HttpResponse 对象。因此,您可以

  • 在返回数据之前,通过设置 self['my-header'] 添加任何您想要的响应头;

  • 使用 self.status_code 更改状态码;

  • 如果您需要设置特定响应内容而不使用序列化器,则返回 self

资源

您的响应类应包装在 restlayer.Resource 类中。生成的实例是一个类似于经典视图的可调用对象。您可以扩展此类来创建自己的资源。只需重写 __call__ 方法即可。

from restlayer import Resource

class SillyResource(Resource):
    def __call__(self, request, *args, **kwargs):
        rsp = super(SillyResource, self).__call__(request, *args, **kwargs)
        rsp.status_code = 401
        rsp['Content-Type'] = 'text/plain'
        return rsp

Django 模型的响应

如果您正在使用 Django 模型,则可以使用 restlayer.ModelResponse。使用此父类作为您的响应,您可以返回模型实例或查询集。以下是一个简单的示例

from django.contrib.auth.models import User
from restlayer import ModelResponse

class SimpleResponse(ModelResponse):
    fields = ('id', 'name', 'firstname', 'email')

    def response_get(self, request):
        return User.objects.all()

就是这样!使用 fields 属性,您可以设置在响应中返回的字段。

您可以添加自定义方法来创建特定的响应字段。此方法接受两个参数:实例request。示例

from django.contrib.auth.models import User
from restlayer import ModelResponse

class SimpleResponse(ModelResponse):
    fields = ('id', 'name', 'firstname', 'email', 'other_field')

    def other_field(self, instance, request):
        return instance.name.capitalize()

    def response_get(self, request):
        return User.objects.all()

URL

您经常需要创建一个 resource_uri 字段,以指向 API 中的另一个资源。响应类提供两种方法来创建绝对(带 FQDN)URL

  • _build_absolute_uri(self, request, [location]) 仅调用 request.build_absolute_uri(location),但您可以根据需要覆盖它。

  • reverse(self, request, view, [args, kwargs]) 作为 django.core.urlresolvers.reverse,但返回一个绝对 URL。

分页

您可能想要对响应进行分页。Restlayer Response 类提供了一种简单的方法来执行此任务:paginate(self, request, object_list, [limit]),这是 django.core.paginator.Paginator 的简单包装。生成的响应将包含以下头

  • X-Pages-Objects

  • X-Pages-Count

  • X-Pages-Current

  • X-Pages-Next(如果存在下一页)

  • X-Pages-Next-URI(如果存在下一页)

  • X-Pages-Prev(如果存在上一页)

  • X-Pages-Prev-URI(如果存在上一页)

使用源代码

我承认这份文档有些粗糙。不要犹豫,阅读源代码,这里没有隐藏的火箭科学,只有一些基本的 Python 代码 :)

许可证

Django Restlayer 在 MIT 许可下发布。有关完整许可信息,请参阅 LICENSE 文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

django-restlayer-0.9.0.tar.gz (8.6 kB 查看哈希值)

上传时间: 源代码

由...