【问题标题】:What are the differences between django-tastypie and djangorestframework? [closed]django-tastypie 和 djangorestframework 有什么区别? [关闭]
【发布时间】:2011-11-10 07:48:24
【问题描述】:

您为什么要使用一个而不是另一个来为您的 Django 应用程序公开一个 API?

http://pypi.python.org/pypi/djangorestframework/

http://pypi.python.org/pypi/django-tastypie

【问题讨论】:

    标签: django rest django-rest-framework


    【解决方案1】:

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

    美味派

    • 正如 Torsten 所指出的,与出色的 django-haystack 相同的窥视者编写的东西不会有太大的错误。根据我在他们的邮件列表中看到的内容,Daniel Lindsey 等人非常有帮助,而且 Tastypie 稳定、全面且有据可查
    • 擅长为您提供一组合理的默认行为,并使构建具有这种风格的 API 变得异常容易。

    Django REST 框架

    • 为您提供可浏览 HTML 的自描述 API。 (例如,请参阅tutorial API。)能够直接在浏览器中导航并与 API 交互是一个巨大的可用性胜利。
    • 尝试始终贴近 Django 习惯用法 - 建立在 Django 的基于类的视图等之上...(而 TastyPie 在 Django 的 CBV 存在之前就出现了,因此使用它自己的基于类的视图实现)
    • 我认为底层架构构建得非常好,解耦等等......

    无论如何,两者都很好。我可能会将 Tastypie 描述为开箱即用地为您提供一组合理的默认值,而 REST 框架则具有非常好的解耦和灵活性。如果您打算在 API 上投入大量时间,我强烈建议您浏览每个文档和代码库,并尝试了解哪个更适合您。

    显然,它的 README 中还有 'Why TastyPie?' 部分和 'REST framework 3'

    另请参阅 Daniel Greenfeld 从 2012 年 5 月起在 Choosing an API framework for Django 上的博客文章(值得注意的是,这距离大型 REST 框架 2.0 发布还有几个月的时间)。

    Reddit 上也有几个帖子,有人问同样的问题,来自 Dec 2013July 2013

    【讨论】:

    • 顺便说一句,我们一直在为一个主要项目使用 Django-rest-framework,它太棒了!我提前一周试驾了美味派,并且对使用 DRF 并不后悔。不幸的是,文档与代码和框架本身不相称,但除此之外,纯粹是幸福。
    • 好东西,谢谢本。是的,你的观点。文件绝对是公平的。计划解决这个问题!
    • “我在 DjangoCon 在 django-rest-framework 上的闪电演讲”视频链接已失效!
    • @Mutant - 谢谢,djangocon.eu 2011 网站现在已经死了,但我已经直接链接到 blip.tv 上的视频。
    • @TomChristie blip.tv 的链接现在已失效! this 是正确的视频吗?
    【解决方案2】:

    两者都是不错的选择。

    对于过滤器,sauthenticpie 开箱即用的功能更强大。如果你有一个暴露模型的视图,你可以做 Django 风格的不等式过滤器:

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

    或 OR 查询:

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

    这些在 djangorestframework 中是可能的,但您必须为每个模型编写自定义过滤器。

    对于回溯,django-rest-framework 给我留下了深刻的印象。当DEBUG = False 出现异常时,Tastypie 会尝试通过电子邮件发送settings.ADMINS。当DEBUG = Truethe default error message is serialised JSON,哪个更难读。

    【讨论】:

    【解决方案3】:

    编辑 过时的答案,tasticpie 不再真正维护了。如果您必须选择一个框架来做 REST,请使用 Django REST 框架。

    要了解它们之间的实际差异,您应该阅读它们的文档。它们都或多或少完整且相当成熟。

    不过,我个人倾向于吃美味派。设置它似乎更容易。它是由创建 django-haystack 的同一个人完成的,这很棒,根据 django-packages,它比 Django REST 框架使用得更多。

    【讨论】:

    • 该文档根本不是一个很好的“关于两者之间实际差异的概述”。
    • 我 -1 这是因为它已经过时了,而且现在存在一个事实错误:DRF 现在比 TastyPie 更常用。也就是说,作者已经包含了 django-packages 的链接,这是一个高质量的答案。
    • 从 Github 历史和 2018 年解决的问题来看,TastyPie 似乎确实还在维护。
    • Tastypie 支持 django 1.11,这对于未来的项目考虑是很令人欣慰的。 django-tastypie.readthedocs.io/en/latest/…
    【解决方案4】:

    值得注意的是,自从第一次提出这个问题以来,DRF 已经越来越强大。

    它是 github 上两者中更活跃的(无论是在提交、star、fork 和贡献者方面)

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

    老实说,最后一个功能是我的杀手锏。当我的所有前端开发人员不确定某些东西如何工作并说“开始玩;发现'太棒了。

    尤其是因为这意味着他们可以按照自己的方式理解它,并且知道 API 确实、绝对、绝对地按照“文档”所说的那样做。在与 API 集成的世界中,仅这一点就使 DRF 成为了被击败的框架。

    【讨论】:

    • 我想知道django-tastypie-swagger 是否缩小了这个差距?
    【解决方案5】:

    嗯,Tastypie 和 DRF 都是很好的选择。您只是不能对其中任何一个出错。 (我从来没有在活塞上工作过;而且它现在不再流行了,所以不会/不能评论它。理所当然。)。 以我的拙见:应该根据您(和您的技术团队)的技能、知识和能力做出选择。 而不是 TastyPie 和 DRF 提供的东西,除非您正在构建一些非常大的东西,例如Quora、Facebook 或 Google。

    就个人而言,我最终开始在 TastyPie 上工作,当时我什至不了解 django。那时一切都说得通,只是非常了解 REST 和 HTTP,但对 django 几乎一无所知或知之甚少。因为我的唯一目的是立即构建将在移动设备中使用的 RESTful API。因此,如果您只是喜欢“我当时恰好被称为 django-new-bie”,不要想太多,去 TastyPie。

    但是,如果您有很多 使用 Django 的经验,对它了如指掌,并且非常擅长使用高级概念(如基于类的视图、表单、模型验证器、查询集、管理器和模型实例以及他们如何相互作用),**去DRF。 **DFR 基于 django 的基于类的视图。 DRF 是惯用的 django。就像您正在编写模型表单、验证器等。(好吧,惯用的 django 与惯用的 python 相去甚远。如果您是 python 专家但没有使用 Django 的经验,那么您最初可能很难适应惯用的 django 哲学和DRF 也很重要)。 DRF 带有许多内置的魔法方法,就像 django 一样。如果你喜欢 django 神奇的方法和哲学,那么 **DRF ** 就是为你准备的。

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

    美味:

    优点:

    1. 易于上手并提供基本功能 OOB(开箱即用)
    2. 大多数时候您不会处理高级 Django 概念,例如 CBV、表单等
    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. 更好的身份验证。更容易编写自定义权限类。工作得很好,重要的是很容易使它与 3rd 方库和 OAuth 一起工作。 DJANGO-REST-AUTH 值得一提的是用于 Auth/SocialAuthentication/Registration 的 LIBRARY。 (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/) 的创建者创建)。对于同样的问题,可能/肯定选择轻量级 Web 框架,如 Flask。

    • 但是为什么呢? - 更易读、更简单、更易于管理的惯用 python(又名 pythonic)代码。虽然代码更多,但最终提供了极大的灵活性和自定义性。

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

    如果您别无选择,只能选择 Django 以及 TastyPie 和 DRF 中的一个?

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

    那你当初为什么选择 DRF/TastyPie?

    • 我主要与预算和时间紧张的初创公司和小公司合作;并且需要提供快速且可用的东西。 Django 很好地服务于这个目的。 (我并不是说 django 不可扩展。Quora、Disquss、Youtube 等网站都在上面运行。但所有这些都需要时间和超过平均水平的技能)

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

    其他参考资料 - 1. 美味之州 (http://toastdriven.com/blog/2014/may/23/state-tastypie/) 2、django-tastypie和djangorestframework有什么区别? (What are the differences between django-tastypie and djangorestframework?)

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

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

        如果你愿意公开你的 API,目前你应该使用 django-rest-framework 和 django。

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

        django-rest-framework 也有大量不断增长的 3rd arty 包,这将帮助您更轻松地构建 API,减少麻烦。

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

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

        简而言之,它设计精良、维护良好、资金充足、提供庞大的第 3 方应用程序、受到大型组织的信任、更容易和更少的样板等等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-10
          • 2011-09-20
          • 2013-03-25
          • 2023-03-08
          • 2016-07-17
          • 2015-07-17
          • 2014-07-11
          • 2020-12-28
          相关资源
          最近更新 更多