如何诊断似乎什么也不做的Django注册表单?

时间:2016-04-01 12:14:06

标签: python django python-3.x django-registration

我正在为我的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>

2 个答案:

答案 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(大写与小写)。

我建议您使用基于类的视图,您不需要编写那么多代码,而且它会更具概要性。

相关问题