form.is_valid()始终返回false而不显示任何错误

时间:2015-12-31 18:01:39

标签: django python-2.7 django-forms

我是python和Django的新手,我正在使用Django的内置用户系统来创建注册。 这是我的看法 `

def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(data=request.POST)
        if form.is_valid():
            form.save()
            #print 'success'
            return HttpResponseRedirect('/accounts/register_success')
        #print 'fail'

    args = {}
    args.update(csrf(request))

    args['form'] = UserCreationForm()
    #print args
    return render_to_response('register.html',args)

` 这是register.html模板。

{% extends "base.html" %}

{% block content %}

    <h2>Register</h2>
    <form action="/accounts/register/" method="post">{% csrf_token %}
      {{ form.errors }}

      {{ form.non_field_errors }}

      {{form}}

    <input type="submit" value="Register" />
    </form>
{% endblock %}

无论如何,form.is_valid()总是返回false而不会发出任何错误。我一直在尝试它。

编辑:我将视图更改为下面的视图,它现在正在工作,但我没有得到确切的原因,两个视图中也没有缩进错误。

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 = {}
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('register.html', args)

非常感谢任何帮助。 在此先感谢:D和新年快乐:P。

2 个答案:

答案 0 :(得分:0)

它不会显示任何错误,因为您始终会重新实例化一个新的未绑定表单。不要这样做;文档中的模式非常清晰,你应该遵循它。

if request.method == 'POST':
    form = UserCreationForm(data=request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/accounts/register_success')
else:
    form = UserCreationForm()

args = {}
args.update(csrf(request))

args['form'] = form
return render_to_response('register.html',args)

答案 1 :(得分:0)

您的观点中没有任何其他条件; 你有责任写args['form'] = UserCreationForm()函数的开头;离;

def register_user(request):
   args = {}
   args['form'] = UserCreationForm()
   if request.method == 'POST':
       form = UserCreationForm(data=request.POST)
       if form.is_valid():
           form.save()

           return HttpResponseRedirect('/accounts/register_success')
   args.update(csrf(request))
   return render_to_response('register.html',args)