我已经成功地为内部用户使用了 Django 的管理面板有一段时间了,但是我最近在尝试自定义它时遇到了障碍,我很好奇我是否在它上面花费了太多时间。所以,我的问题是:
Django 的管理面板是否只是临时的脚手架,即仅在应用程序的初始开发期间使用,并被类似于 Rails 的脚手架的自定义代码替换?
显然,通过使用管理面板,我可以免费获得很多功能,并且随着新功能的添加,我也可以免费获得这些功能。其他人做什么?
我已经成功地为内部用户使用了 Django 的管理面板有一段时间了,但是我最近在尝试自定义它时遇到了障碍,我很好奇我是否在它上面花费了太多时间。所以,我的问题是:
Django 的管理面板是否只是临时的脚手架,即仅在应用程序的初始开发期间使用,并被类似于 Rails 的脚手架的自定义代码替换?
显然,通过使用管理面板,我可以免费获得很多功能,并且随着新功能的添加,我也可以免费获得这些功能。其他人做什么?
我不会说管理员是临时的脚手架,但在许多情况下它可能不是最佳选择。我曾与一家非常大型且知名的媒体公司合作,该公司使用管理员作为其制作人和编辑的整个工作流程界面的基础。不幸的是,您关于何时或何时不使用管理员的决策过程将在很大程度上受益于您对 Django 内部结构的全面了解;在您获得知道何时不被卡住的经验之前,您可能会卡住几次。:p
管理员的“可定制性”可能有点主观。我见过团队按照自己的意愿弯曲它,但它还需要对模型、表单(以及自然地像 ModelForms 和 FormSets 之类的东西)和模板的较低级别细节有很好的工作知识。我认为许多传统智慧和最佳实践还没有出现在有组织的文档中。准备好在源代码中进行大量挖掘。好消息是,您可能会对如何利用框架中的一些一流实体有更深入的了解。坏消息是你的老板可能不会很高兴你花了一天的大部分时间来更改表单上的单个输入。
最近的增强功能使将您自己的视图放置在管理 URL 空间下变得更加容易,因此您可以考虑编写自己的视图以满足您的需要并在标准管理页面中的适当位置添加链接的方法。我通常建议那些刚接触 Django 或刚刚进入管理定制的人强烈考虑只滚动你自己的管理视图。毕竟,Django 已经让创建 CRUD 风格的应用程序变得非常容易,而且当你想改变表示或行为时,你不必觉得你在与一个死板的系统作斗争。
Django Admin 适用于除了它提供的默认添加/更改/删除处理之外没有任何价值的事情。
数据库中充满了查找表和管理表。例如,邮政编码到状态映射,最终用户不应看到。后台批处理作业执行的日志。
您的应用程序可能会有一些或多或少具有“管理性”的表——有人维护它们,但不是大型用户社区。
您的应用程序可能会有一些表格供最终用户添加/更改/删除。您可能希望为此活动提供广泛的自定义页面。
Django 在新闻界长大。作家和编辑准备数据(使用管理界面)。客户通过定制的网页读取数据。
我们有使用管理页面的管理人员。我们为客户定制了页面。我们两者都用。
我们为内部管理员提供几乎所有内容的默认管理页面。我们为客户方管理员提供选定表的默认管理员。我们为客户提供精心制作的特定应用页面。
大约 6 个月前,当我刚开始使用 Django 时,我问了一个类似的问题。
对于那个特定的应用程序,我选择不使用 Django admin,事后看来这是一个非常明智的决定。从那以后,我一般不使用它,但有时它很棒。对我来说,这真的取决于用户。如果我们正在为客户构建一个自定义的数据驱动应用程序并使用他们提供的功能集,我永远不想使用 Django 管理员。在这些情况下,几乎可以肯定他们会有一些变化,这可能是在管理员中工作的真正痛苦。如果这是一个不断发展的项目,这些更改将变得越来越像 hack,你可能最终不得不开始将部分内容剥离到站点的非 Django 管理部分,此时有两个界面可以做东西。
但是,如果客户更倾向于接受应用程序的工作方式,那么 Django 管理员会很好,假设您的表和他们正在处理的数据之间通常存在 1:1 的对应关系。
正如 Brian Luft 所说,为 CRUD 应用程序创建界面真的很容易,所以如果您觉得将来需要任何自定义,那么从一开始就编写自己的界面可能是最简单的。作为超级用户,您始终可以根据自己的需要保留 django 管理员。这通常是我所做的,因此我可以轻松地获得表级访问权限来更改可能不会在普通用户管理员中显示的字段。
不,我不会将它与 Rails 的脚手架进行比较。从你的问题中不清楚你遇到了什么样的问题——你能举个例子吗?
通过添加自定义 ModelAdmin类,您可以对管理员进行很多自定义:隐藏字段、显示其他字段、允许在同一页面上编辑相关项目或限制/过滤出现在外键字段中的选项。您还可以通过添加排序、将过滤器添加到首页、搜索字段来使用户更容易找到内容。较新版本的 Django 还允许您创建自己的自定义命令,这些命令可以一次应用于多个对象。
但是,如果问题不在于基本的更改列表和编辑表单,您可以通过创建特定于模型的模板并覆盖默认管理模板来完全自定义它们。
不,您肯定可以使用它来管理您的网站,但正如 Django 所说;仅适用于受信任的用户。因此,如果您创建一个 cms,那就太好了。因为(希望)后端用户将是受信任的用户!