LINUX.ORG.RU

Django


0

1

Вопрос 1: Правильно ли я понимаю, что вместо form.cleaned_data надо использовать form.fields В доках ничего нет, но если вывести form.__dict__, то поля cleaned_data там нет. И на метод form.clean() джанго ругается.

Вопрос 2: Допустим, форма отправляет данные через метод POST. Нужно включить защиту csrf. Для этого нужно либо добавить (% csrf_token %} в шаблон, либо во вьюхе сделать vars.update(csrf(request)).

Во втором варианте, переменная vars содержит только

{'csrf_token': }

Если делать через тэг в шаблоне, то request.POST ничего не содержит, однако, request.__dict__ содержит значение

'_raw_post_data': 'csrfmiddlewaretoken=d2bff7df2671119da7f615f9f2f&caption=1&text=2'
, где caption=1 и text=2 - нужные мне значения. Как мне их получить в виде переменных?

★

Вопрос 1: Правильно ли я понимаю, что вместо form.cleaned_data надо использовать form.fields

Смотря для чего. Вообще, использовать надо именно cleaned_data, который заполняется во время проверки form.is_valid()

Вопрос 2: Допустим, форма отправляет данные через метод POST. Нужно включить защиту csrf.

Если это не аякс разговоры, то ничего руками делать не надо. Надо чтобы была включена нужны мидллварь.

gistart ★
()
Ответ на: комментарий от gistart

> который заполняется во время проверки form.is_valid()
вот в чём дело. а я этот метод не вызывал

Надо чтобы была включена нужны мидллварь.
какая? 'django.middleware.csrf.CsrfViewMiddleware' включена, но джанга ругается. если отключить, то всё норм

memnek ★
() автор топика
Ответ на: комментарий от memnek

django.middleware.csrf.CsrfViewMiddleware

эта, все верно. {% csrf_token %} в шаблоне формы, говоришь, есть?

Как мне их получить в виде переменных?

Задача то собственно какая? Просто включить встроенный механизм или какое-нибудь адское шаманство?

gistart ★
()

где caption=1 и text=2 - нужные мне значения. Как мне их получить в виде переменных?

if form.is_valid():
    caption = form.cleaned_data['caption']
    text = form.cleaned_data['text']
power ★
()
Ответ на: комментарий от gistart

всё заработало. я по невнимательности проверку на валидность формы засунул после попытки получить поле cleaned_data. грешил на csrf. щас всё правильно работает: и csrf (через тэг токена в шаблоне) и собственно получение данных из формы

memnek ★
() автор топика

form.fields — это поля формы, метаинформация.

form.cleaned_data — значения полей валидной формы после вызова is_valid.

k_andy ★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.