2009-01-30 96 views
20

我刚开始使用Django进行个人项目。Django管理员应用程序或滚动我自己的?

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

这是一个社区wiki,因为它可以被认为是一个民意调查。

+0

我很挑剔(TypeError,你会得到很丰富),但你想使用`request.user.is_staff` - 没有parens。这是一种属性,而不是一种方法。 – AdamKG 2009-01-30 20:03:41

+0

对不起,习惯的力量。我以Java开发人员的身份工作,因为出于封装的原因,您总是使用getter和setter。 – Powerlord 2009-01-30 20:11:52

回答

16

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

我猜你应该看到它是这样的:

使用Django管理:节省时间写它,使用它失去的时间。
滚动你自己的管理员:不用花时间写它,节省使用它的时间。

+0

那么我可能会花时间滚动我自己的管理员。 – Powerlord 2009-01-30 21:53:25

+3

-1:这不是一个简单的权衡。您需要的内容的80%是内置的。少于20%需要手工构建。 – 2009-01-31 02:52:39

17

由于多种原因,我会使用Django的管理应用程序。首先,编写一个管理应用程序可能会非常棘手,如果您想正确执行,需要一些时间,并且django.contrib.admin是免费的,并且可以直接使用。其次,它的设计非常好,非常适合(甚至对于非技术用户)。第三,它涵盖了很多常见的案例,在重写它之前浪费时间看起来并不明智,直到你确信自己无法做到这一点。第四,定制并不是那么难。例如,添加akismet标记为垃圾邮件和mark-as-ham按钮确实是小菜一碟。

3

我很伤心地发现,虽然django管理员应用程序一开始就节省了大量时间,但随着您的消费者需要更多不易与默认管理界面集成的功能,它将成为稍后的一个障碍。您最终可能会遇到两种管理工具:django管理员(用于需要简单数据输入的应用程序)以及用于需要更丰富界面的其他应用程序的自定义滚动管理界面。

7

很容易有选择地不同程度地覆盖管理员的部分。

您可以:

  1. 上针对应用程序的基础,甚至通过模型模型基础覆盖管理模板。通过继承和子类通过把你之前在urls.py

  2. 抓管理URL的,并提供了基于管理员看你自己的界面和感觉

  • 覆盖管理的意见。 ..以及更多。

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

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

    • django-reversion接管 管理日志,并将其延伸到全 历史。
    • Tusk CMS结合了 django-mptt应用程序与JQuery嵌套 可排序的小部件以一种整洁的方式。

    另外搜索与管理相关的片段的django-snippets和this page已获得丰富的信息。

  • 3

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

    Jannis已经做了一些很酷的东西,他的作品显示了它是多么容易: http://jannisleidel.com/2008/11/wysiwym-editor-widget-django-admin-interface/

    ,我工作的一个项目最近将使用下拉菜单的时间各部分时间选择器,(h,m,s)另一个字段会指示一周中的哪几天会重复发生......它将在一周中使用7个复选框,并将其作为pickle dateutil.rruleset存储在数据库中。然后,您只需提供有关用于各个字段的小部件的管理提示。

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

    您创建的字段将成为您可以积累的最可重用,最成熟的知识产权中的一部分......而且您不必从头编写自己的管理员。

    1

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

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

    但是,如果您的网站在其用户之间有更丰富的交互,则需要编写django视图,以便实现交互,同时还限制用户实际执行的操作。

    1

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

    相关问题