Доброго времени!
Django 2.x. Хочу при первом посещении сайта добавлять некоторые параметры в куки (значение валюты сайта по умолчанию). Делаю, через middleware во так:
# /app/middlewares.py
class CurrencyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if not request.COOKIES.get('currency'): # проверяю куку, если нет, то добавляем
response.set_cookie('currency', 'dollar', max_age=1000)
return response
В файл настроек добавляю эту миддлвару:
# /app/settings.py
MIDDLEWARE = [
...
'app.middlewares.CurrencyMiddleware',
]
В шаблоне прописал select, где по клику на option — эта кука должна меняться на передаваемое значение в функцию (Vue.js + vue-cookies за это отвечает). Использую CSS фреймворк Bulma:
// /templates/header.html
<div class="dropdown-menu switcher" id="dropdown-menu" role="menu">
<div class="dropdown-content">
{% if request.COOKIES.currency != 'euro' %}
<a @click="changeCurrency('euro')" class="dropdown-item">
<span class="icon"><i class="fas fa-euro-sign"></i></span>
<span>{% trans 'Euro' %}</span>
</a>
{% endif %}
{% if request.COOKIES.currency != 'dollar' %}
<a @click="changeCurrency('dollar')" class="dropdown-item">
<span class="icon"><i class="fas fa-dollar-sign"></i></span>
<span>{% trans 'Dollar' %}</span>
</a>
{% endif %}
{% if request.COOKIES.currency != 'ruble' %}
<a @click="changeCurrency('ruble')" class="dropdown-item">
<span class="icon"><i class="fas fa-ruble-sign"></i></span>
<span>{% trans 'Ruble' %}</span>
</a>
{% endif %}
</div>
</div>
// /static/js/script.js
import Vue from 'vue'
import VueCookies from 'vue-cookies'
Vue.use(VueCookies)
const switcher = new Vue({
el: '.switcher',
methods: {
changeCurrency: function (cur) {
if (this.$cookies.isKey('currency')) { // проверка на наличие куки
this.$cookies.remove('currency') // если есть, то удаляем старую куку
}
this.$cookies.set('currency', cur) // задаём новую куку
location.reload() // перезагружаем страницу
}
}
})
Этот свитчер валют сквозной, то есть на каждой странице он есть и (по идее) должен везде работать одинаково. Но, по какой-то неведомой причине, на некоторых страницах — свитчер не заменяет куку при клике, а добавляет новую и меняет только её значение (как будто бы дубля нет)! Вот:
Эти страницы — обычные вьюхи, где делается
get
по
queryset
модели. Например:
class PayOrderView(LoginRequiredMixin, View):
"""
Pay Order by ID
"""
template_name = 'orders/orders_payment_choose.html'
def get(self, request, order_id):
# Get Orders object
order = BasicOrder.objects.get(id=order_id)
if request.user.id == order.user.id:
return render(request, self.template_name, {'order': order})
return Http404
Подскажите, как быть? Может быть я что-то не то делаю?
Буду рад толковым комментариям!