Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » CSRF verification failed. Request aborted. Попытка работы с элементарными формами. [RSS Feed]

#1 Окт. 10, 2012 15:20:09

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

Хотел создать простенький механизм регистрации пользователей.

Представление выглядит так:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/reg/")
    else:
        form = UserCreationForm()
        return render_to_response("registration.html", {
            'form': form,
        })     

Шаблон вот так:
<html>
	<form action="" method="post">{% csrf_token %}
		{{ form.as_p }}
		<input type="submit" value="Создать учетную запись">
	</form>
</html>

После того как заполненная форма уходит сервер отвечает:
Forbidden (403)
CSRF verification failed. Request aborted.

Я упорно не понимаю, что не так, прошу подсказать, гуглом я себе помочь к сожалению не сумел.



_________
Новичок

Офлайн

#2 Окт. 10, 2012 15:26:16

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

from django.template import RequestContext
return render_to_response("registration.html", {
            'form': form,
        }, context_instance=RequestContext(request))     
Должно работать.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Окт. 10, 2012 15:26:36)

Офлайн

#3 Окт. 10, 2012 15:37:12

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

barabansheg
from django.template import RequestContext
return render_to_response("registration.html", {
            'form': form,
        }, context_instance=RequestContext(request))     
Должно работать.

Переписал представление:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/reg/")
    else:
        form = UserCreationForm()
        return render_to_response("registration.html", {
            'form': form,
        }, context_instance=RequestContext(request))

К сожалению ничего не изменилось.



_________
Новичок

Офлайн

#4 Окт. 10, 2012 15:41:21

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

А если посмотреть исходник html файла с формой после рендера, там csrf прописан?



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#5 Окт. 10, 2012 15:46:30

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

barabansheg
А если посмотреть исходник html файла с формой после рендера, там csrf прописан?
Исходник html после рендера выглядит вот так:
<html>
<form action="" method="post">
<p>
<label for="id_username">Username:</label> 
<input id="id_username" type="text" name="username" maxlength="30" /> 
<span class="helptext">Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.</span>
</p>
<p>
<label for="id_password1">Password:</label> <input type="password" name="password1" id="id_password1" />
</p>
<p>
<label for="id_password2">Password confirmation:</label> <input type="password" name="password2" id="id_password2" /> 
<span class="helptext">Enter the same password as above, for verification.</span>
</p>
<input type="submit" value="Создать учетную запись">
</form>
</html>



_________
Новичок

Офлайн

#6 Окт. 10, 2012 15:53:53

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

Проверь включено ли “django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py. Если включено, то ради эксперимента попробуй вместо

{'form': form, }
передать в шаблон locals()



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#7 Окт. 10, 2012 16:03:00

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

barabansheg
Проверь включено ли “django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py. Если включено, то ради эксперимента попробуй вместо
{'form': form, }
передать в шаблон locals()

“django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py включено.
Если я правильно понял, функцию:
return render_to_response("registration.html", locals(), context_instance=RequestContext(request)
передал вместо:
{'form': form, }

Результат не изменился.



_________
Новичок

Отредактировано SorrowFuck (Окт. 10, 2012 16:08:26)

Офлайн

#8 Окт. 10, 2012 16:15:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

SorrowFuck
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/reg/")
    else:
        form = UserCreationForm()
        return render_to_response("registration.html", {
            'form': form,
        })
Мне дико интересно, а что вернет вьюха, если форма не свалидируется?



Отредактировано FishHook (Окт. 10, 2012 16:16:05)

Офлайн

#9 Окт. 10, 2012 16:35:47

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

FishHook
SorrowFuck
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/reg/")
    else:
        form = UserCreationForm()
        return render_to_response("registration.html", {
            'form': form,
        })
Мне дико интересно, а что вернет вьюха, если форма не свалидируется?

Каким способом это лучше проверить?



_________
Новичок

Офлайн

#10 Окт. 10, 2012 19:22:58

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

CSRF verification failed. Request aborted. Попытка работы с элементарными формами.

Каким способом это лучше проверить?
Просто не заполняй полей.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

  • Начало
  • » Django
  • » CSRF verification failed. Request aborted. Попытка работы с элементарными формами.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version