Я пишу представление входа в django, которое повторно использует универсальное представление для выполнения большей части его тяжелой работы, но позже я рассмотрю некоторые детали:
COMPANY_COOKIE = 'last_login_company_id'
def login(request, *args, **kwargs):
initial_company_id = request.COOKIES[COMPANY_COOKIE] if COMPANY_COOKIE in request.COOKIES else None
def makeCompanyAuthenticationForm(*args, **kwargs):
kwargs.setdefault('initial', {})
initial = kwargs['initial']
initial['company'] = initial_company_id
return CompanyAuthenticationForm(*args, **kwargs)
kwargs['authentication_form'] = makeCompanyAuthenticationForm
response = django_login(request, *args, **kwargs)
if request.method == 'POST' and request.user.is_authenticated():
request.session['user_menu'] = get_user_menu()
if 'company' in request.POST:
log.debug("Storing user company %s in cookie %s", request.POST['company'], COMPANY_COOKIE)
response.set_cookie(COMPANY_COOKIE, request.POST['company'])
request.session.save()
return response
Оставляя в стороне любые комментарии о механизме установки компании по умолчанию в моей пользовательской форме, я задаюсь вопросом, почему не устанавливается мой COMPANY_COOKIE
.
Я использую панель инструментов отладки Django с INTERCEPT_REDIRECTS
, установленным на True
, и я вижу, что вызывается мой оператор журнала. Если я вставлю pdb.set_trace () после set_cookie, я увижу, что response.cookies содержит cookie-файл моей компании. Однако в моем браузере его нет. В DjDT я вижу, что переменная COOKIES моего запроса не содержит мой cookie, и в инспекторе хранилища Chrome я вижу то же самое; last_login_company_id
cookie нигде нет.
Почему бы это не установить?