Django项目/应用的RESTful API

9 投票
4 回答
3118 浏览
提问于 2025-04-16 07:23

当你想要把你的Django项目变成“REST风格”时,你更喜欢用什么方法呢?

我得出的结论是,其实有三种选择可以做到这一点:

对我来说,正确的方法是试试这三种,然后选择最适合我的那一个,所以我也想听听你们的看法……

谢谢。

4 个回答

3

作为“某个家伙”,我想解释一下为什么会有django-restful-resources这个东西。它并不是为了把模型直接当作资源来使用,而是为了让一个网址可以对应多个不同的处理方法,每种方法对应一种HTTP请求方式。就这么简单。虽然它可以用来展示模型对象,但也可以用来把服务当作资源,或者任何你想通过一个网址和HTTP请求方式进行交互的东西。如果你想要一个功能更全面的解决方案,那就去试试Piston吧。

5

在Django 1.3中,新推出的基于类的通用视图让你轻松实现自己的REST接口。你可以使用自定义的序列化和反序列化工具,几乎可以用标准代码复刻出完整的piston实现。我用500行代码做了一个基于View(1.3)的REST模块,里面有通用的REST资源类和子资源,支持自然键关联,还能处理JSON和XML的序列化等等。这个模块真的是根据我应用的需求量身定做的。

我这样做是为了克服piston代码中的一些限制,比如在处理器调用.get()之前,想修改查询集(比如用.values(...)),或者在序列化时不能使用模型的方法。

如果你按照自己的需求去做,几天之内就能搞定一套工作正常的类和混合类,而且你会完全理解它们,掌控自如。

7

我对django-piston最熟悉,所以我自然会推荐你使用这个。

不过,快速看一下另外两个选项,django-rest-interface只是把模型当作资源暴露出来,而django-restful-resources则是某个人的临时尝试,效果可能不太稳定。

如果我没记错的话,Piston是从bitbucket.org自己的网站开发中演变而来的,它提供了很大的灵活性——你可以从资源的访问方法中返回几乎任何对象,而不仅仅是模型实例,并且它会正确编码。此外,它还内置了一些很不错的功能,比如表单验证(当然,如果你能让它正常工作的话)和请求限制等。

撰写回答