【问题标题】:Django Admin app or roll my own? [closed]Django Admin 应用程序还是我自己的? [关闭]
【发布时间】:2010-10-04 11:56:31
【问题描述】:

我刚刚开始将 Django 用于个人项目。

使用内置管理应用程序与将我的管理功能集成到应用程序本身(通过检查 request.user.is_staff)有什么优缺点?

这是一个社区 wiki,因为它可以被视为投票。

【问题讨论】:

  • 我在吹毛求疵(你得到的 TypeError 会提供很多信息),但你想使用 request.user.is_staff - 没有括号。这是一个属性,而不是一个方法。
  • 对不起,习惯的力量。我是一名 Java 开发人员,出于封装原因,您总是使用 getter 和 setter。

标签: python django django-admin


【解决方案1】:

我会使用 Django 管理功能,而不是自己编写。您可以通过为管理员添加自己的模板、您自己的小部件等来自定义 Django 管理员。我正在使用一个非常自定义的 Django 管理员进行项目。如果我们决定手写,完成时间将是原来的 4 倍。我只是看不到您想要自己编写的场景。

【讨论】:

    【解决方案2】:

    考虑使用 Django 管理员,但为特定字段使用您自己的手工制作的小部件。您可以创建复杂的表单部分,并告诉管理员将您的代码用于任何特定字段或某个类型的所有字段的输入和显示。

    Jannis 做了一些很酷的事情,他的工作向您展示了它是多么容易: http://jannisleidel.com/2008/11/wysiwym-editor-widget-django-admin-interface/

    我最近正在处理的一个项目合并了一个时间选择器,该选择器使用下拉列表来显示各个时间部分,(h,m,s)另一个字段将指示一周中的哪几天重复......它会一周中的几天使用 7 个复选框,并将其作为腌制的 dateutil.rruleset 存储在数据库中。然后,您只需向管理员提示将哪些小部件用于各个字段。

    它涉及定义您的数据类、您自己的子类 forms.Widget 的小部件、您自己的子类 forms.Field 的 Field,以及一个 model.Field。这三个类中的每一个都很好、简单、干净,并且负责从数据库到模型、模型到小部件的转换,并通过这两个步骤返回。这真是一件美丽的事情。

    您创建的字段将是您可以积累的一些最可重复使用、最复杂的知识产权......而且您不必从头开始编写自己的管理员。

    【讨论】:

    • 我认为这是对这个问题最有建设性的答案。我没有想过将 Django admin 仅用于 Web 应用程序。但是,我想这是可以做到的。
    【解决方案3】:

    这真的取决于我猜的项目。虽然您可以在管理员中完成所有操作,但当您的应用程序变得更加复杂时,使用管理员也会变得更加复杂。如果您想让您的应用真正易于管理,您需要控制每一个小细节,而这对于管理应用来说是不可能的。

    我猜你应该是这样看的:

    使用 django admin:节省编写时间,浪费时间使用它。
    滚动您自己的管理员:浪费时间编写它,节省使用它的时间。

    【讨论】:

    • 那么我可能会花时间滚动自己的管理员。
    • -1:这不是一个简单的权衡。您需要的 80% 是内置的。不到 20% 需要手工构建。
    • -1:在您知道值得花时间之前,没有理由浪费时间滚动自己的替代品。
    • -1 也来自我。我发现管理员非常具有可塑性。
    • -1。灵活的管理,易于扩展,无需调整。
    【解决方案4】:

    我建议在几乎所有类型的项目中启用管理站点。设置它的成本非常低,它为您提供了一种相当方便的机制来检查和修改您的站点。

    如果您的网站主要是单向信息流,从网站管理员到访问者,那么管理网站可能就是您所需要的。

    但是,如果您的网站在其用户之间有更丰富的交互,您将需要编写 django 视图,以启用该交互,同时限制对用户真正可以做的事情的访问。

    【讨论】:

      【解决方案5】:

      在不同程度上选择性地覆盖部分管理员非常容易。

      你可以:

      1. 逐个应用甚至逐个模型覆盖管理模板。

      2. 通过继承和子类化覆盖管理视图

      3. 通过在 urls.py 中将您的网址放在您的前面来捕获管理员网址,并提供您自己的基于管理员外观的界面

      ...还有更多。

      所以从管理员开始,然后在需要的地方插入任何你需要的自定义功能。

      有很多应用程序可以与管理员一起做一些聪明的事情。例如:

      • django-reversion 接管 admin-log 并将其扩展为完整 历史。
      • Tusk CMS 结合了 带有 JQuery 嵌套的 django-mptt 应用程序 以简洁的方式排序小部件。

      还可以搜索 django-sn-ps 以获取与管理员相关的 sn-ps 和 this page 有丰富的信息。

      【讨论】:

        【解决方案6】:

        我很遗憾地发现,虽然 django 管理应用程序一开始可以节省大量时间,但后来却成为了障碍,因为您的客户需要更多不易与默认管理界面集成的功能。您最终可能会使用两种管理工具:django admin(用于需要简单数据输入的应用程序),以及用于需要更丰富界面的其他应用程序的自定义滚动管理界面。

        【讨论】:

          【解决方案7】:

          出于多种原因,我会使用 Django 的管理应用程序。首先,编写一个管理应用程序可能会非常棘手,如果你想把它做好的话,需要一些时间,django.contrib.admin 是免费的,开箱即用。其次,它的设计非常好,使用起来非常好(即使对于非技术用户也是如此)。第三,它涵盖了很多常见的情况,在你真的确定你不能这样做之前,浪费时间重写它似乎是不明智的。第四,定制并不难。例如,添加 akismet 标记为垃圾邮件和标记为火腿按钮真的是小菜一碟。

          【讨论】:

          • +1:对于一些关键事务,您可以自己滚动。对于大多数交易,使用内置的。
          猜你喜欢
          • 2010-10-07
          • 1970-01-01
          • 1970-01-01
          • 2012-01-15
          • 2019-11-30
          • 1970-01-01
          • 2020-03-21
          • 2012-02-26
          • 2012-06-22
          相关资源
          最近更新 更多