21

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

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

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

4

7 回答 7

17

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

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

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

于 2009-01-30T16:24:45.540 回答
17

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

于 2009-01-31T02:13:45.927 回答
7

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

你可以:

  1. 逐个应用程序甚至逐个模型地覆盖应用程序上的管理模板。

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

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

...还有更多。

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

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

  • django-reversion接管管理日志并将其扩展为完整的历史记录。
  • Tusk CMS以一种简洁的方式将 django-mptt 应用程序与 JQuery 嵌套可排序小部件结合在一起。

还可以在 django-snippets 中搜索与管理相关的片段,这个页面有很多信息。

于 2009-01-31T18:59:23.573 回答
3

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

于 2009-01-31T02:19:30.003 回答
3

考虑使用 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。这三个类中的每一个都很好、简单、干净,并且负责从数据库到模型、模型到小部件的转换,并通过这两个步骤返回。这真是一件美丽的事情。

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

于 2009-02-01T02:46:36.983 回答
1

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

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

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

于 2009-02-01T03:10:18.620 回答
1

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

于 2010-10-01T18:52:27.583 回答