Django Admin应用程序还是我自己的?

时间:2009-01-30 15:22:27

标签: python django django-admin

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

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

这是一个社区维基,因为它可以被视为民意调查。

7 个答案:

答案 0 :(得分:17)

我会使用Django的管理员应用程序,原因有很多。首先,编写一个管理应用程序可能非常棘手,如果你想做正确的话需要一些时间,django.contrib.admin是免费的,并且开箱即用。其次,它设计得非常好,非常适合(即使是非技术用户)。第三,它涵盖了很多常见的情况,在你真的确定不能这样做之前,浪费时间重写它似乎并不明智。第四,定制并不是那么困难。例如,添加akismet mark-as-spam和mark-as-ham按钮确实是一块蛋糕。

答案 1 :(得分:16)

这真的取决于我猜的项目。虽然您可以在管理员中执行所有操作,但当您的应用程序变得更复杂时,使用管理员也会变得更加复杂。如果你想让你的应用程序真的很容易管理,你需要控制每一个细节,这在管理员应用程序中是不可能实现的。

我猜你应该这样看:

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

答案 2 :(得分:7)

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

你可以:

  1. 按应用基础甚至逐个模型覆盖应用上的管理模板。

  2. 通过继承和子类化

  3. 覆盖管理员视图
  4. 通过在urls.py中添加您自己的接口来捕获管理员网址,并提供基于管理员外观的自己的接口

  5. ......还有更多。

    首先从管理员开始,然后插入您需要的任何自定义功能。

    有很多应用程序可以通过管理员做出聪明的事情。例如:

    • django-reversion接管了 admin-log并将其扩展为完整 历史。
    • Tusk CMS结合了 使用JQuery嵌套的django-mptt app 整洁的小部件。

    还搜索django-snippets以获取管理员相关的片段,this page已获得丰富的信息。

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

Jannis已经做了一些很酷的事情,他的作品告诉你它是多么容易:   http://jannisleidel.com/2008/11/wysiwym-editor-widget-django-admin-interface/

我正在开展的一个项目最近采用了一个时间选择器,它使用了各个时间段的下拉菜单,(h,m,s)另一个字段会指示一周中哪些日子重复出现...它会使用7个复选框作为一周中的几天,并将其作为pickled dateutil.rruleset存储在数据库中。然后,您只需提供管理员提示,了解哪些小部件可用于各个字段。

它涉及定义你的数据类,你自己的小部件子类form.Widget,你自己的Field子类forms.Field,以及model.Field。这三个类中的每一个都很好,简单和干净,并负责从数据库到模型,模型到小部件的转换,以及这两个步骤。这真的很美。

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

答案 5 :(得分:1)

我建议在几乎所有类型的项目上启用管理网站。设置成本非常低,它为您提供了一个检查和修改站点的合理便利机制。

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

但是,如果您的网站在其用户之间进行了更丰富的互动,则需要撰写可以启用该互动的django视图,同时还限制对用户实际操作的访问权限。

答案 6 :(得分:1)

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