English 中文(简体)
Django自带的管理应用程序还是自己开发?[关闭]
原标题:
  • 时间:2009-01-30 15:22:27
  •  标签:

我刚开始为个人项目使用Django。

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

这是个社群百科,因为它可以被认为是一个调查。

最佳回答

我想这真的取决于项目吧。尽管你可以在管理界面中做所有事情,但是当你的应用变得更加复杂时,使用管理界面也变得更加复杂。如果你想让你的应用真正容易管理,你需要掌控每一个细节,但这在管理员应用中并不是很容易实现。

我想你应该这样看待它:

Using django admin: save time writing it, lose time using it.
Rolling your own admin: lose time writing it, save time using it.

问题回答

我会使用Django的管理应用程序,有很多原因。首先,如果你想做得好,编写管理应用程序可能会非常棘手并需要一些时间,而django.contrib.admin是免费的,并且开箱即用。其次,它的设计非常好,非常适合使用(甚至非技术用户也是如此)。第三,它涵盖了很多常见情况,因此在您真正确定无法使用其他方式之前,浪费时间重写它似乎不明智。第四,它实际上并不难定制。例如,添加Akismet标记为垃圾邮件和标记为非垃圾邮件按钮真的很容易。

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

你可以:

  1. 根据应用程序或甚至模型的基础,覆盖管理模板。

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

  3. 通过在urls.py中将您的URL放在其前面来捕获管理URL,并提供基于管理界面外观的自定义接口。

还有很多很多。

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

有很多应用程序可以与管理员进行巧妙的交互。例如:

  • django-reversion takes over the admin-log and extends it into full history.
  • Tusk CMS combines the django-mptt app with JQuery nested sortable widget in a neat way.

还可以在django-snippets中搜索与管理员相关的代码片段,这个页面包含了丰富的信息。

我惋惜地发现,尽管 Django 管理应用程序一开始能节省很多时间,但随着客户要求更多不易与默认管理界面集成的功能,它后来变成了一种阻碍。 您可能会最终拥有两种管理工具:Django 管理(适用于需要简单数据输入的应用程序)和自定义的管理界面,用于需要更丰富接口的其他应用程序。

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

Jannis has done some cool stuff, and his work shows you how easy it is: http://jannisleidel.com/2008/11/wysiwym-editor-widget-django-admin-interface/

我最近在工作的项目中,加入了一个时间选择器,它使用下拉菜单来选择时间的不同部分(小时、分钟、秒)。另一个字段将指示哪些星期几重复出现...它将使用7个星期几的复选框,并将该日期存储在数据库中作为一个pickle dateutil.rruleset。然后,您只需为各个字段提供管理员提示要使用哪些小部件。

它涉及定义您的数据类、您自己的小部件(子类化forms.Widget)、您自己的字段(子类化forms.Field)和模型字段。这三个类中的每一个都是漂亮、简单、清晰的,负责从数据库到模型、从模型到小部件,然后通过这两个步骤返回。它真的是一个美的事物。

你所创建的领域将成为你所获取的最可重复,最复杂的知识产权之一......而你不必从头开始编写自己的管理。

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

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

然而,如果您的网站在用户之间有更丰富的交互,则需要编写django视图,以使该交互能够实现同时限制用户实际可以执行的操作。

我会选择使用Django管理功能,而不是编写自己的。您可以通过添加自己的管理模板、小部件等来自定义Django管理。我正在为一个具有高度自定义的Django管理的项目工作。如果我们决定手写它,就需要4倍的时间才能完成。我无法想象您想编写自己的情景。





相关问题
热门标签