Форум сайта python.su
2
Хотел создать простенький механизм регистрации пользователей.
Представление выглядит так:
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>
Офлайн
2
from django.template import RequestContext return render_to_response("registration.html", { 'form': form, }, context_instance=RequestContext(request))
Отредактировано barabansheg (Окт. 10, 2012 15:26:36)
Офлайн
2
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))
Офлайн
2
А если посмотреть исходник html файла с формой после рендера, там csrf прописан?
Офлайн
2
barabanshegИсходник html после рендера выглядит вот так:
А если посмотреть исходник html файла с формой после рендера, там csrf прописан?
<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>
Офлайн
2
Проверь включено ли “django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py. Если включено, то ради эксперимента попробуй вместо
{'form': form, }
Офлайн
2
barabansheg
Проверь включено ли “django.middleware.csrf.CsrfViewMiddleware” в секции MIDDLEWARE_CLASSES файла settings.py. Если включено, то ради эксперимента попробуй вместопередать в шаблон locals(){'form': form, }
return render_to_response("registration.html", locals(), context_instance=RequestContext(request)
{'form': form, }
Отредактировано SorrowFuck (Окт. 10, 2012 16:08:26)
Офлайн
568
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)
Офлайн
2
FishHookSorrowFuckМне дико интересно, а что вернет вьюха, если форма не свалидируется?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, })
Офлайн
2
Каким способом это лучше проверить?Просто не заполняй полей.
Офлайн