python - Django 创建新用户失败

标签 python html css django

我在尝试使用 Django 中的 UserCreationForm 创建新用户时遇到了一些困难。 我认为问题出在注册 HTML 页面上,但我真的不明白我做错了什么。 当我在填写必填字段后单击提交时,没有任何反应。 我希望你能帮助我。

signup.html 的一部分:

<div class="container">
                                <form id="register-form" method="post">
                                    {% csrf_token %}
                                    {% for field in form %}

                                        {% if field.name == 'first_name' %}
                                          <div class="form-group">
                                            <input id="register-first_name" type="text" name="registerFirst" required
                                                   class="input-material">
                                            <label for="register-first_name" class="label-material">{{ field.label_tag }}</label>
                                          </div>
                                        {% endif %}


                                        {% if field.name == 'last_name' %}
                                          <div class="form-group">
                                            <input id="register-last_name" type="text" name="registerLast" required
                                                   class="input-material">
                                            <label for="register-last_name" class="label-material">{{ field.label_tag }}</label>
                                          </div>
                                        {% endif %}


                                        {% if field.name == 'username' %}
                                          <div class="form-group">
                                            <input id="username" type="text" name="username" required
                                                   class="input-material">
                                            <label for="username" class="label-material">{{ field.label_tag }}</label>
                                          </div>
                                        {% endif %}



                                        {% if field.name == 'email' %}
                                          <div class="form-group">
                                            <input id="register-email" type="text" name="registerEmail" required
                                                   class="input-material">
                                            <label for="register-email" class="label-material">{{ field.label_tag }}</label>
                                          </div>
                                        {% endif %}



                                        {% if field.name == 'password' %}
                                          <div class="form-group">
                                            <input id={{ form.name.name }} type="text" name="password" required
                                                   class="input-material">
                                            <label for={{ form.name.name }} class="label-material">{{ field.label_tag }}</label>
                                          </div>
                                        {% endif %}

                                    {% endfor %}

                                    <input id="register" type="submit" value="Register" class="btn btn-primary">
                                </form>
                            <div/>

我的forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password', )

    def save(self, commit=True):
        user = super(SignUpForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

我的views.py:

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate
from django.contrib.auth import login as login_a
from django.shortcuts import render, redirect

from movie.forms import SignUpForm


def index(request):
    return render(request, 'home.html')

def login(request):
    return render(request,'login.html')

def logout(request):
    return render(request,'logout.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password')
            print (username);
            print (raw_password);
            user = authenticate(username=username, password=raw_password)
            login_a(request, user)
            return redirect('login')
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

最佳答案

您的表单看起来不正确。您使用的名称值不正确(例如 name="registerFirst" 而不是 name="first_name"),因此 Django 表单不会使用提交的值。这样您就不会显示字段错误,因此您在提交表单时不会得到任何有用的反馈。

我将从让 Django 呈现表单开始。这将使您可以修复 View 中的任何问题。

<form id="register-form" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input id="register" type="submit" value="Register" class="btn btn-primary">
</form>

为了帮助调试,您可以在 View 中打印值,例如在 if form.is_valid(): block 之后添加 print(form.errors)

然后,一旦 View 使用简单模板,如果您需要对布局进行更多控制,您可以手动呈现字段。请参阅 rendering fields manually 上的文档获取更多信息。如果您这样做,请记住向用户显示任何字段/表单错误。

如果您确实手动呈现字段,则可以使用 {{ form.first_name }} 访问字段,而不是循环遍历 {% for field in form %} 然后必须检查 field.name

关于python - Django 创建新用户失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50062126/

相关文章:

Python 迭代二维数组 __iter__

JavaScript。中缀到后缀

css - 如何将文本向左旋转 90 度并根据 html 中的文本调整单元格大小

python - 当使用组合而不是继承时,如何在 Python 中的兄弟对象之间进行通信

python - 不明白这两行代码的区别

html - 如何别名 google 网络字体 font-family/font-weight 组合?

javascript - 如何向我的网站添加 HTML 代码,以便当人们单击它时,它会打开与我的 WhatsApp 对话?

jquery - 如何使用滚动使 Fancybox 弹出全宽

html - 使用标签和单选按钮作为 CSS 钩子(Hook)是否适合 HTML?

python - Django formwizard - 无法从步骤1到步骤2获取数据