跳转到主要内容

Python的轻量级REST微型框架。

项目描述

https://travis-ci.org/toastdriven/restless.svg?branch=master https://coveralls.io/repos/github/toastdriven/restless/badge.svg?branch=master

Python的轻量级REST微型框架。

文档在 https://restless.readthedocs.io/

与Django、Flask、Pyramid、Tornado及Itty等Python Web框架配合使用效果出色,但同样适用于许多其他Python Web框架。基于从Tastypie及其他REST库中汲取的教训。

特性

  • 小巧、快速的项目代码库

  • 默认输出JSON,但可覆盖

  • RESTful

  • Python 3.6+

  • Django 2.2+

  • 灵活

反特性

(永远不会添加的东西…)

  • 自动ORM集成

  • 授权(对象级或非对象级)

  • 丰富的过滤选项

  • XML输出(尽管你可以实现自己的)

  • 元类

  • 混入

  • HATEOAS

为什么?

简单来说,我关心的是创建灵活且RESTful的API。在构建Tastypie时,我试图创建一个极为完整且全面的工具。结果是写了很多钩子方法(易于扩展)以及大量的(看似)冗余,因为我试图以灵活且可覆盖的方式满足人们对灵活/可覆盖的需求。

但事实上,我个人真正想要的只是一些RESTful动词、JSON序列化以及覆盖行为的能力。

这个是为我自己编写的,但也许对你也很有用。

宣言

而不是试图在每个视图中构建自动执行典型正确操作的东西,而是由你自己实现各种HTTP方法的内容。

示例代码

# posts/api.py
from django.contrib.auth.models import User

from restless.dj import DjangoResource
from restless.preparers import FieldsPreparer

from posts.models import Post


class PostResource(DjangoResource):
    # Controls what data is included in the serialized output.
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'title': 'title',
        'author': 'user.username',
        'body': 'content',
        'posted_on': 'posted_on',
    })

    # GET /
    def list(self):
        return Post.objects.all()

    # GET /pk/
    def detail(self, pk):
        return Post.objects.get(id=pk)

    # POST /
    def create(self):
        return Post.objects.create(
            title=self.data['title'],
            user=User.objects.get(username=self.data['author']),
            content=self.data['body']
        )

    # PUT /pk/
    def update(self, pk):
        try:
            post = Post.objects.get(id=pk)
        except Post.DoesNotExist:
            post = Post()

        post.title = self.data['title']
        post.user = User.objects.get(username=self.data['author'])
        post.content = self.data['body']
        post.save()
        return post

    # DELETE /pk/
    def delete(self, pk):
        Post.objects.get(id=pk).delete()

连接到它

# api/urls.py
from django.conf.urls.default import url, include

from posts.api import PostResource

urlpatterns = [
    # The usual suspects, then...

    url(r'^api/posts/', include(PostResource.urls())),
]

许可证

BSD

运行测试

测试套件使用tox来支持Python和Django的多个版本。当前支持的Python版本有

  • CPython 3.6

  • CPython 3.7

  • CPython 3.8

  • CPython 3.9

  • PyPy

你只需要安装上述Python解释器和tox包(通过pip获取),然后运行tox命令。

项目详情


下载文件

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

源代码分布

restless-2.2.0.tar.gz (45.9 kB 查看哈希值)

上传时间 源代码

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面