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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.