我正在为我的django网站制作一个注册系统,这个注册表格不起作用。我不知道为什么,我填写表格,它什么也没做。它不会重定向到我的register_success页面。这是我的代码,因此您可以帮助诊断问题。
Views.py:
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:
<html>
<body>
{% block content %}
<h2>Register</h2>
<form action="/accounts/register/" method="post">{% csrf_token %}
{{ form }}
<input type="submit" value="Register"/>
</form>
{% endblock %}
</body>
</html>
Register_success.html:
<html>
<body>
{% block content %}
<h2>You have registered</h2>
<p>Click <a href="/accounts/login/">here</a> to login.</p>
{% endblock %}
</body>
</html>
答案 0 :(得分:4)
问题是您始终在创建一个空白表单。这意味着您不会在表单中看到任何错误。
args['form'] = UserCreationForm()
您可以通过更改视图来解决此问题。
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()
return render(request, 'register.html', {'form': form})
请注意,第一个if语句应该是if request.method == 'POST':
,正如yedpodtrzitko在答案中所发现的那样。我已将已弃用的render_to_response
切换为render
,这简化了事情。我建议您也更新您的成功视图。
def register_success(request):
return render(request, 'register_success.html')
答案 1 :(得分:2)
request.method
的值应为POST
,而不是post
(大写与小写)。
我建议您使用基于类的视图,您不需要编写那么多代码,而且它会更具概要性。