【问题标题】:form.is_valid() is always returning false without showing any errorsform.is_valid() 总是返回 false 而不显示任何错误
【发布时间】:2016-04-05 15:19:06
【问题描述】:

我对 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。

【问题讨论】:

    标签: django python-2.7 django-forms


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 即使没有 else 条件,它也适用于我的第二个视图。 +丹尼尔·罗斯曼
    • 我不明白你的评论。您的第二个视图具有 else 条件。
    • 对不起,是的,它正在工作我之前更改它时忘记重新启动服务器,无论如何它为什么重要,因为它进入 if 条件它将被重定向,否则它进入 else健康)状况。 +丹尼尔·罗斯曼
    • 它之所以有效,是因为如果验证失败,它不会重新实例化表单。 if 语句有 两个,else 在外面。
    • 是的,我的错。 .无论如何,谢谢,新年快乐:D。
    【解决方案2】:

    您的视图中没有任何其他条件; 你必须写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)
    

    【讨论】:

    • 一旦进入 if 条件它就会重定向,所以我认为在开头或结尾使用 args 并不重要。
    • 它会重定向,只有当表单是有效的,否则它只会显示没有错误的表单。
    猜你喜欢
    • 2014-12-27
    • 2018-01-05
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多