如何将设置变量更改为每个用户都不同

时间:2018-08-31 12:36:40

标签: django python-3.x django-settings

MY views.py

def change_currency(request):
    settings.CURRENCY = request.POST['currency']
    return HttpResponseRedirect('/')

我的settings.py

CURRENCY = 'EUR'

我的表格

                    <form action="{% url 'change_currency' %}"
                          method="POST" class="currency">
                        EUR
                        {% csrf_token %}
                        <input style="display: none" value="EUR" name="currency">
                    </form>

问题1

如果我手动更改settings.CURRENCY变量,那么一切都像超级按钮一样工作,但是如果我创建表单并尝试更改settings.CURRENCY,它将不起作用

问题2

settings.py中将有一个变量可以针对不同用户进行更改

问题3

我无法使用会话,因为我在settings.CURRENCY中使用了filters.py,而且我不知道如何在request.session中使用filters.py

1 个答案:

答案 0 :(得分:0)

首先can access request,因此session在过滤器中。

由于多种原因,您尝试使用的解决方案不起作用。

设置一次导入

将这样的模块对象导入另一个模块(例如myapp.views)时:

from settings import CURRENCY

settings.CURRENCY模块中看不到对views所做的更改。导入一次,并且导入时的值绑定到模块中的变量。

多名工人

即使您在views模块中更改了变量,也存在另一个问题。如果您正在运行非开发服务器(例如gunicorn),它将启动几个进程来处理请求。可能发生的情况是,对设置所做的更改由一个进程处理,而下一个请求由具有旧值的另一个工作进程处理。

应该在一个位置存储此设置。会话是一个好地方,因为它是全局的,对用户来说是私有的。