Найти - Пользователи
Полная версия: CSRF verification failed. Request aborted. Попытка работы с элементарными формами.
Начало » Django » CSRF verification failed. Request aborted. Попытка работы с элементарными формами.
1 2
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,
        })     

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

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

Я упорно не понимаю, что не так, прошу подсказать, гуглом я себе помочь к сожалению не сумел.
barabansheg
from django.template import RequestContext
return render_to_response("registration.html", {
            'form': form,
        }, context_instance=RequestContext(request))     
Должно работать.
SorrowFuck
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))

К сожалению ничего не изменилось.
barabansheg
А если посмотреть исходник html файла с формой после рендера, там csrf прописан?
SorrowFuck
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>
barabansheg
Проверь включено ли “django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py. Если включено, то ради эксперимента попробуй вместо
{'form': form, }
передать в шаблон locals()
SorrowFuck
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, }

Результат не изменился.
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,
        })
Мне дико интересно, а что вернет вьюха, если форма не свалидируется?
SorrowFuck
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,
        })
Мне дико интересно, а что вернет вьюха, если форма не свалидируется?

Каким способом это лучше проверить?
barabansheg
Каким способом это лучше проверить?
Просто не заполняй полей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB