如何将 Django 应用程序设置保存在数据库中,或即时更改?

Posted

技术标签:

【中文标题】如何将 Django 应用程序设置保存在数据库中,或即时更改?【英文标题】:How to keep Django app settings in database, or change on-the-fly? 【发布时间】:2011-08-12 02:23:21 【问题描述】:

有人对如何创建一个允许我即时更改设置的系统有任何建议吗?例如,我有一个用户可以填写的文本区域,现在它的最大字符数限制为 1000。有一天我可能想将其更改为 500、2000 或其他内容。所以我不想对模型本身进行限制,免得我想经历备份数据库、运行syncdb、重新导入数据库的噩梦,这样的噩梦只是为了改变一个简单的值。我宁愿通过 javascript 或 views.py 代码检查字符长度。

if (length > value_stored_somewhere)
 throw error message

我认为我可以将这些值放在 settings.py 中,或者单独的 local-settings.py 中,但这意味着如果我想更改值,我必须重新启动应用程序,对吗?或者我可能是错的,所以如果我错了,请告诉我。

我认为理想的方法是将设置放入数据库中,这样管理员就可以在不接触任何 .py 文件的情况下即时更改值。我看了看 django-dbsettings 但那里似乎根本没有任何活动。

请给我建议和解决方案。非常感谢!

【问题讨论】:

【参考方案1】:

您的所有假设都是正确的。如果要更改设置(在任何设置文件中),则需要重新启动应用程序。现在没有办法“即时更改设置”。在处理之外有一堆可重用的应用程序,称为Live Settings。也许你尝试其中之一。请记住,即使您即时更改设置,也不会更改 Django 中的行为(因为 Django 或其他应用程序直接使用内部设置)。不过,对于自定义应用程序或项目,这是一个很好的方法。

【讨论】:

哎呀...这是一个可怕的答案。那么 Django 专业人士在这种情况下会做什么呢?他们如何处理设置更改?另外,在使用 Apache 的实时生产环境中,我将如何重新启动 Django 应用程序?谢谢! 是的,在 django 中处理设置并不是最佳的,并且已经经常受到批评。对于小型项目,在文件中进行更改并部署它们很好,对于较大的项目,我会从一开始就考虑使用实时设置应用程序(尽管在我的公司中我编写了一个自定义应用程序,因为上述应用程序都不符合我们的需求)。 关于您的问题:如果您使用 apache 和 mod_wsgi 部署 django 项目,您可以简单地执行 touch apache.wsgi(假设您的项目的 wsgi 脚本是 apache.wsgi)。这将强制底层 apache 进程使用新代码。 好吧,我想我会把一些设置放到 settings.py 或 local-settings.py 中。谢谢!

以上是关于如何将 Django 应用程序设置保存在数据库中,或即时更改?的主要内容,如果未能解决你的问题,请参考以下文章

Django - 如何将 javascript 变量保存到 Django 数据库中? [复制]

Django如何在保存到数据库之前连接表格数据

Django:如何使用FormView和ajax将对象保存到数据库?

如何在单个请求中使用 django 信号将数据保存在(用户和配置文件)表中?

如何在 Django 中向模型添加临时字段?

如何确保保存在数据库中的UTC日期等于Django中指定时区的午夜[重复]