【问题标题】:Django changing custom settings at runtimeDjango 在运行时更改自定义设置
【发布时间】:2015-07-11 02:16:17
【问题描述】:

在我的 settings.py 中有一些自定义设置,一些我使用的数据结构。这些很少改变。 我注意到从视图中更改它们是行不通的。 如何强制 django 在运行时重新加载设置文件? 到目前为止,唯一可行的方法是重新启动 apache Web 服务器。但我想避免这种情况。

【问题讨论】:

  • 但是这篇文章没有答案。
  • 您不应该尝试在运行时更改设置。你应该重新考虑你在做什么以及你的项目的架构。如果您想发布您正在尝试做的事情,也许我们可以帮助您找出更清洁的解决方案。

标签: python django runtime settings reload


【解决方案1】:

在我的代码中。我需要为受保护(仅限管理员)页面重新发明 @login_required 装饰器。这就是我所做的。 在 project/settings.py 中,我创建了一个名为 ACCESS_CP = False 的变量 在我导入的 app/views.py 中

from django.conf import settings

在 def login_form 中

# (if the user is authenticated and the user is an Active Directory Domain Admin)
settings.ACCESS_CP = True

在 def 控制面板中:

 if request.method == "GET" and settings.ACCESS_CP == False:
      return redirect('login')
 elif request.method == "GET" and settings.ACCESS_CP == True:
      settings.ACCESS_CP = False
      return render(request, 'controlpanel.html')

【讨论】:

    【解决方案2】:

    对于您的应用程序,您可以将配置参数存储在 redis 或 django 模型中。

    这是https://github.com/jezdez/django-constance 的有用的可重复使用的应用程序

    您还可以查看其他现有的 django 配置管理解决方案:

    https://www.djangopackages.com/grids/g/configuration/

    【讨论】:

    • 我希望不要使用单独的缓存进程。我已经有了 memcached。
    • django-constance 支持在数据库中存储配置数据。
    【解决方案3】:

    在 view.py 中导入

    将 django.conf 导入为配置文件

    默认主页(请求):

    conf.settings.SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
    conf.settings.DATABASES['default']['NAME'] = 'testdb'
    

    【讨论】:

    • 你好,你可以这样设置,但是程序没有执行,重启程序,它会恢复到原来的值,我一直很困扰这个问题怎么解决
    猜你喜欢
    • 2015-06-14
    • 2011-09-25
    • 1970-01-01
    • 2012-03-10
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多