помощники django-униформы и тэги CSRF поверх POST - PullRequest
3 голосов
/ 23 января 2011

Я использую django-uni-формы для отображения моих полей, с довольно примитивным примером прямо из их книги.

Когда я рендеринг полей формы, используя <form>{%csrf_tag%} {%form|as_uni_form%}</form>, все работает как ожидалось.

Однако помощники django-uni-form позволяют генерировать тег формы (и другой контент, связанный с помощником), используя следующий синтаксис - {% with form.helper as helper %}{% uni_form form helper%}{%endwith%} - Это создает для меня тег <form>,так что некуда встраивать мой собственный CSRF_token.Когда я пытаюсь использовать этот синтаксис, форма прекрасно отрисовывается, но без токена CSRF, поэтому отправка формы каждый раз завершается неудачей.

Кто-нибудь имеет опыт работы с этим?Есть ли установленный способ добавить токен?Я предпочитаю второй синтаксис по причинам повторного использования.Спасибо!

Ответы [ 4 ]

3 голосов
/ 03 февраля 2011

Вы проверили источник?Это должно быть уже там.Шаблонный тег uni_form должен включать его автоматически.

2 голосов
/ 12 февраля 2011

У меня точно такая же проблема с django-uni-form.Токен csrf не отображается после тега <form>, если я использую:

{% load uni_form_tags %}
{% uni_form form helper %}

или:

{% load uni_form_tags %}
{% with form.helper as helper %}
    {% uni_form form helper%}
{%endwith%}

Если я включаю его вручную, он работает:

<form action='{{ request.path }}' method='POST' class="uniForm">{% csrf_token %}
{{ form|safe }}
</form>

Я нашел пост в блоге , в котором описывается, как вручную включать токен csrf:

helper = FormHelper()

csrf_token = Hidden(
                name = 'csrfmiddlewaretoken',
                value = request.META['CSRF_COOKIE'])
helper.add_input(csrf_token)

Совсем не красиво, но, по крайней мере, он заставляет униформу работать.

1 голос
/ 14 ноября 2011

Используйте самую последнюю версию django-uni-form.Это исправляет это и многое другое.

1 голос
/ 30 апреля 2011

Самое простое решение - установить django-uni-form из GitHub до тех пор, пока версия PyPi не будет обновлена ​​до 0.8.

pip install https://github.com/pydanny/django-uni-form/tarball/master
...