我是python Django的初学者。并尝试在教程的帮助下构建一个发布文章网站。我被困在UserCreationForm。我使用UserCreationForm创建了一个表单,但是当我提交表单时,我既不能提交表单也不能在页面上收到任何错误消息。
我的 views.py 代码
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.template.context_processors import csrf
from django.contrib.auth.forms import UserCreationForm
def register_user(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
args = {}
args.update(csrf(request))
args['form'] = UserCreationForm()
print args
return render_to_response('register.html', args)
def register_success(request):
return render_to_response('register_success.html')
register.html
{% extends "base.html" %}
{% block content %}
<h2>Register</h2>
<form action="/accounts/register/" method="post"> {% csrf_token %}
{{form}}
<input type="submit" value="Register"/>
</form>
{% endblock %}
register_success.html
{% extends "base.hml" %}
{% block content %}
<h2>You have registered!</h2>
<p>Click <a href="/accounts/login/">Here</a> to login again</p>
{% endblock %}
答案 0 :(得分:3)
问题是您始终在创建一个空白表单。
args['form'] = UserCreationForm()
这意味着当表单无效时,您没有看到POST请求的任何错误。
相反,您应该只为GET请求创建空白表单。
from django.shortcuts import render
def register_user(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
form = UserCreationForm()
args = {'form': form}
return render(request, 'register.html', args)
请注意,我使用render
而不是过时的render_to_response
简化了视图。这意味着您不需要手动处理csrf。
答案 1 :(得分:1)
您可以使用Django Generic Views,特别是CreateView,它会让您的生活更轻松。您可以像这样使用它:
from django.views.generic import CreateView
class CreateUserView(CreateView):
template_name = 'register.html'
form_class = UserCreationForm
success_url = '/accounts/register_success'
将此添加到您的urls.py
,您就可以了:
from mysite.views import CreateUserView
# add this url pattern
url(r'^sign_up/$', CreateUserView.as_view(), name='signup'),