Как изменить переменную настроек, чтобы она была разной для каждого пользователя - PullRequest
0 голосов
/ 31 августа 2018

MY views.py

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

Мои настройки.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 голосов
/ 31 августа 2018

Прежде всего, вы можете получить доступ к запросу и, следовательно, session в фильтре.

Решение, которое вы пытаетесь использовать, не работает по нескольким причинам.

Настройки импортируются один раз

Когда вы импортируете объект модуля, подобный этому, в другой модуль (например, myapp.views):

from settings import CURRENCY

изменения, внесенные в settings.CURRENCY, не будут видны в модуле views. Импорт происходит один раз, и значение во время импорта привязывается к переменной в модуле.

Несколько рабочих

Даже если вы измените переменную в модуле views, существует другая проблема. Если вы работаете с сервером без разработки (например, gunicorn), он запускает несколько процессов для обработки запросов. Может случиться, что изменение, внесенное в настройки, обрабатывается одним процессом, а следующий запрос обрабатывается другим работником, имеющим старое значение.

Должно быть одно место, где хранятся эти настройки. Сессия - хорошее место, поскольку она глобальна и приватна для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...