【问题标题】:Error creating a multi-step form using Django session使用 Django 会话创建多步骤表单时出错
【发布时间】:2021-06-24 17:58:31
【问题描述】:

我目前正致力于在 Django 中构建一个多步骤注册表单。我遵循了官方文档,可以看到here。尽管表单没有显示任何错误,但不会创建用户。有没有我可能忽略的问题?

def signup_step_one(request):
    if request.user.is_authenticated:
        return HttpResponseRedirect(reverse('accounts:personal-signup'))
    else:
        if request.method == 'POST':
            form = CustomUserCreationForm(request.POST)
            if form.is_valid():
                # collect form data in step 1
                email = form.cleaned_data['email']
                password = form.cleaned_data['password1']

                # create a session and assign form data variables
                request.session['email'] = email
                request.session['password'] = password
                
                return render(request, 'personal-signup-step-2.html', context={
                    'form': form,
                    "title": _('Create your personal account | Step 1 of 2'),
                })
        else:
            form = CustomUserCreationForm()
    return render(request, 'personal-signup-step-1.html', {
        "title": _('Create your personal account | Step 1 of 2'),
        'form': form,
    })


def signup_step_two(request):
    # create variables to hold session keys
    email = request.session['email']
    password = request.session['password']

    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.email = email
            user.set_password(password)
            user.first_name(form.cleaned_data['first_name'])
            user.last_name(form.cleaned_data['last_name'])
            user.save()
            print('user created')
        return HttpResponse('New user created')
    else:
        form = CustomUserCreationForm()
    return render(request, 'personal-signup-step-2.html', {
        "title": _('Create your account | Step 2 of 2'),
        'form': form,
    })

【问题讨论】:

    标签: django django-forms django-formwizard


    【解决方案1】:

    我注意到 signup_step_two 函数中的以下行将始终返回消息“新用户已创建”,即使表单无效:

      return HttpResponse('New user created')
    

    将上面的行放在 if 语句中。还要在 else 语句或模板内打印 form.errors 以检查问题。 例如:

        if form.is_valid():
            # create the user
            return HttpResponse('New user created')
        else:
            print(form.errors)
    

    【讨论】:

    • <ul class="errorlist"><li>email<ul class="errorlist"><li>This field is required.</li></ul></li><li>password1<ul class="errorlist"><li>This field is required.</li></u l></li><li>password2<ul class="errorlist"><li>This field is required.</li></ul></li></ul> @Ajeet 我注意到了上述错误。这意味着表单没有使用用户会话中的数据。我想知道可能是什么原因。
    • 您在两个视图中使用相同的表单 CustomUserCreationForm。这 3 个字段是必需的。因此,您还需要在 personal-signup-step-2.html 中的表单中提交电子邮件、密码 1 和密码 2。如果您不想再次向用户显示这些内容,可以将它们作为隐藏输入类型发送。
    • 另一种选择是对 signup_step_two 视图使用不同的形式。表单将仅包含 first_name、last_name 字段,您可以像现在一样设置其他内容,例如会话中的电子邮件和密码。
    • 我尝试了这两个建议,但都没有奏效。为了确保我收集的信息正确完成,我打印了模板中request.session['email']request.session['password'] 的电子邮件和密码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2011-04-25
    相关资源
    最近更新 更多