django-tastypie和djangorestframework有什么区别?[关闭]


Answers:


206

作为django-rest-framework的作者,我有一个明显的偏见;),但是我对此的希望但客观的看法是:

美味馅饼

  • 正如Torsten所指出的,使用与令人敬畏的django-haystack相同的偷窥功能编写的内容不会出错。从我在邮件列表中看到的内容来看,Daniel Lindsey等人非常有帮助,Tastypie稳定,全面并且有据可查
  • 出色的表现为您提供了一套明智的默认行为,并使使用这种样式的API的构建变得异常简单。

Django REST框架

  • 为您提供HTML可浏览的自描述API。(例如,请参阅教程API。)能够直接在浏览器中导航和与API交互是一个巨大的可用性胜利。
  • 尝试始终与Django习语保持紧密联系-建立在Django基于类的视图之上,等等...(而DeliciousPie在Django的CBV存在之前就出现了,因此使用了它自己的基于类的视图实现)
  • 我想认为基础架构已经很好地构建,解耦了...

无论如何,两者都是好的。我可能会把Tastypie的特征描述为给您开箱即用的一组明智的默认值,而REST框架则具有很好的解耦性和灵活性。如果您打算在API上花费大量时间,建议您浏览每个文档和文档的代码库,并尝试获得更适合您的感觉。

显然,还有“为什么吃美味的馅饼?” README和“ REST framework 3”

另请参见Daniel Greenfeld在2012年5月发布的关于为Django选择API框架的博客文章(值得一提的是,这还需要在大型REST框架2.0版本发布前几个月)。

2013年12月2013 7月,Reddit上还有几个话题,人们问同样的问题。


7
顺便说一句,我们一直在将Django-rest-framework用于一个大型项目,它很棒!我提前一个星期试驾好吃的馅饼,对使用DRF并不感到遗憾。不幸的是,文档并没有与代码和框架本身相提并论,除此之外,纯属幸福。
本·罗伯茨

好东西,谢谢本。是的,您的意思是。该文档绝对是公平的。计划解决这个问题!
汤姆·克里斯蒂

“我在DjangoCon上关于django-rest-framework的闪电谈话”视频链接已死!
2012年

1
@Mutant-谢谢,djangocon.eu 2011网站现在已经死了,但是我已经直接链接到blip.tv上的视频。
汤姆·克里斯蒂

@TomChristie到blip.tv的链接现在已经死了!是这个正确的视频?
凯文斯(Kevins)2014年

19

两者都是不错的选择。

对于过滤器,即兴功能更强大。如果您有一个暴露模型的视图,则可以执行Django样式的不平等过滤器:

http://www.example.com/api/person?age__gt=30

或或查询:

http://www.example.com/api/mymodel?language__in=en&language__in=fr

djangorestframework可以实现这些功能,但是您必须为每个模型编写自定义过滤器。

对于回溯,django-rest-framework给我留下了深刻的印象。当时,Tastypie尝试通过电子邮件发送settings.ADMINS例外情况DEBUG = False。如果为DEBUG = True则默认错误消息是序列化的JSON,很难读取。


8
您无需在Django REST Framework中为此编写自定义过滤器。您只需要使用DjangoFilterBackendREST框架在此处提供的提供的内容即可:django-rest-framework.org/api-guide/filtering#api-guide
monokrome 2014年

13

编辑过时的答案,好吃不再真正保持了。如果必须选择执行REST的框架,请使用Django REST框架。

有关两者之间实际差异的概述,请阅读它们的文档。它们或多或少都完整且相当成熟。

我个人比较喜欢吃。设置起来似乎比较容易。它是由创建django-haystack的人完成的,它很棒,并且根据django-packages,它的使用比Django REST框架更多。


2
该文档根本不是一个很好的“关于两者之间实际差异的概述”。
monokrome

我-1是因为它已经过时了,并且现在存在一个事实错误:DRF现在比TastyPie使用得多。就是说,作者已经包含了django-packages的链接,这是一个高质量的答案。
texnic '16

1
根据Github的历史和2018年已解决的问题,TastyPie似乎确实仍在维护。
Sushil

Django 1.11支持Tastypie,这对将来的项目考虑来说是一个安慰。django-tastypie.readthedocs.io/en/latest/...
elsadek

5

值得注意的是,自从第一次提出要求以来,DRF的实力就不断增强。

它是github上两者中最活跃的(无论是提交,星标,分叉和贡献者)

DRF具有OAuth 2支持和可浏览的API。

老实说,我的最后一个特点是杀手.。当我不确定所有事物的工作原理并说“开始游戏;可以玩”时,可以将我所有的前端开发人员指向可浏览的API。找出来是太棒了。

尤其重要的是,因为这意味着他们必须以自己的方式理解它,并且知道API确实,绝对地,完全按照“文档”中的说明进行操作。在与API集成的世界中,仅凭这一事实就使DRF成为了必不可少的框架。


我想知道是否django-tastypie-swagger缩小了差距?
维克多·谢尔琴科

2

好吧,Tastypie和DRF都是很好的选择。您根本不会出错。(我从来没有在活塞上工作过;它现在已经不再趋于流行了,所以不会/无法对此发表评论。这是理所当然的。)在我的拙见中:应根据您(以及您的技术团队)的技能,知识和能力做出选择。而不是根据TastyPie和DRF提供的功能,除非偏离路线,否则您将构建诸如Quora,Facebook或Google之类的真正大公司。

就个人而言,当我什至不了解django的时候,我最终开始首先在DeliciousPie上工作。那时,这一切都是有道理的,只非常了解REST和HTTP,却几乎没有或几乎没有有关django的知识。因为我的唯一意图是立即构建要在移动设备中使用的RESTful API。因此,如果您就像“我碰巧当时被称为django-new-bie”一样,请不要认为TastePie会更多。

但是如果你有很多使用Django的经验,请完全了解它,并且可以使用高级概念(例如基于类的视图,表单,模型验证器,QuerySet,管理器和模型实例以及它们之间如何交互)非常自在,* *去DRF。** DFR基于django基于类的视图。DRF是惯用的django。就像您正在编写模型表单,验证器等。(好吧,惯用的django与惯用的python相距甚远。如果您是python的专家,但没有Django的经验,那么您最初可能很难适应惯用的django哲学,对于DRF也是如此)。DRF带有许多内置的魔术方法,就像django一样。如果您喜欢django的神奇方法和哲学,** DRF **仅适合您。

现在,只是要回答确切的问题:

好吃的

优点:

  1. 易于上手并提供基本功能OOB(开箱即用)
  2. 大多数时候,您不会处理CBV,表单等高级Django概念
  3. 更具可读性的代码,更少的魔力!
  4. 如果您的模型是NON-ORM,那就去做吧。

缺点:

  1. 并不严格遵循惯用的Django(请注意,python和django的理念大相径庭)
  2. 一旦扩展,自定义API可能会有点困难
  3. 没有O-Auth

DRF:

  1. 遵循惯用的django。(如果您从内到外都知道django,并且对CBV,Forms等非常满意,那么请毫无疑问地去做吧)
  2. 使用ModelViewSets提供开箱即用的REST功能。同时,使用CustomSerializer,APIView,GenericViews等为自定义提供更好的控制。
  3. 更好的身份验证。更容易编写自定义权限类。可以很好地工作,并且非常重要的是,非常容易与第三方库和OAuth一起使用。DJANGO-REST-AUTH值得一提的是用于身份验证/社交身份验证/注册的库。(https://github.com/Tivix/django-rest-auth

缺点:

  1. 如果您不太了解Django,请不要这么做。
  2. 魔法!有一段时间很难理解魔术。因为它是在Django的CBV之上编写的,而CBV的本质又是相当复杂的。(https://code.djangoproject.com/ticket/6735
  3. 学习曲线陡峭。

我个人将在下一个项目中使用什么?

  • 现在,我不再是MAGIC和开箱即用功能的粉丝。因为它们都是以*巨大的代价而来的。*假设我可以选择所有项目并控制项目时间和预算,那么我将从像RESTLess(https://github.com/toastdriven/restless)(由TastyPie和django-haystack(http: //haystacksearch.org/))。对于同一件事,可能/一定要选择像Flask这样的轻量级Web框架

  • 但为什么?-更具可读性,简单性和可管理性的惯用python(aka pythonic)代码。虽然有更多的代码,但最终提供了极大的灵活性和定制性。

    • 显式胜于隐式。
    • 简单胜于复杂。
    • 复杂胜于复杂。
    • 扁平比嵌套更好。
    • 稀疏胜于密集。
    • 可读性很重要。
    • 特殊情况还不足以打破规则。

如果您只能选择Django以及DeliciousPie和DRF之一,该怎么办?

  • 现在,相当了解Django,我将使用** DRF。**
  • 为什么?-惯用的djagno!(虽然我不喜欢)。更好的OAuth和第3方集成(我最喜欢django-rest-auth)。

那为什么首先选择DRF / TastyPie?

  • 我通常与预算有限且时间紧的初创公司和小型公司合作。并且需要快速交付可用的东西。Django很好地达到了这个目的。(我并不是说django不可扩展。在上面运行着Quora,Disqus,Youtube等网站。但是所有这些都需要时间,而且还需要更多普通技能)

希望它将帮助您做出更好的决定。

其他参考资料-1 . Deliciouspie的状态(http://toastdriven.com/blog/2014/may/23/state-tastypie/)2 . django-tastypie和djangorestframework有什么区别?(django-tastypie和djangorestframework有什么区别?


1

两者都使用过后,我喜欢(首选)有关Django Rest Framwork的一件事是,它与Django非常一致。

编写模型序列化器与编写模型表单非常相似。内置的通用视图与Django的HTML通用视图非常相似。


1

Django-tastypie不再由其原始创建者维护,他创建了自己的新的轻量级框架。

目前,如果您愿意公开自己的API,则应将django-rest-framework与django结合使用。

大型公司正在使用它。django-rest-framework是django团队的核心成员,他获得了维护django-rest-framework的资金。

django-rest-framework也拥有大量不断增长的第3 arty软件包,它们将帮助您以更少的麻烦来更轻松地构建API。

drf的某些部分也将在django中合并。

drf比django-tastypie提供了更好的模式和工具。

简而言之,它经过精心设计,维护良好,资金雄厚,可提供庞大的第三方应用程序,受到大型组织的信任,并且比上榜更容易,更少样板。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.