【问题标题】:Django is not taking input from html POST formDjango 没有从 html POST 表单中获取输入
【发布时间】:2016-02-17 17:20:00
【问题描述】:

我有这个 html 表单:

<form method="post" action="">
    {% csrf_token %}
        <div class="inputText">
            <input type="text" name="username" placeholder="Username" value = required />
            <br><br>
            <input type="email" name="email" placeholder="Email" required />
            <br><br>
            <input type="password" name="pass1" id="pass1" placeholder="Password" required />
            <br><br>
            <input type="password" name="pass2" id="pass2" onkeyup="checkPass(); return false;" placeholder="Confirm Password" required />
            <br><br>
            <span id="confirmMessage" class="confirmMessage"></span>
        </div>
        <div class="send">
            <input type="submit" name="register" value="Register" class="register" />
        </div>

这是我的 forms.py :

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')

我的看法

def register(request):
if request.method == "POST":
    form = UserForm(request.POST)
    if form.is_valid():
        form.save
        new_user = authenticate(username=request.POST['username'], password =request.POST['password'])
        login(request.new_user)
        return HttpResponseRedirect(request, '/index')
else:
    form = UserForm()
return render(request, 'authen/register.html', {'form': form})

这应该是一个注册系统,但是当我按下注册时,它会重新加载注册页面,但什么也没有。当我转到 django admin 时,我没有看到新用户,所以 django 没有从表单字段中获取输入。

【问题讨论】:

    标签: python html django post


    【解决方案1】:

    该表单可能无效,但您的模板中没有显示任何错误。至少在某处做{{ form.errors }},虽然实际上你应该直接从 Django 表单中输出所有字段及其错误:

    {{ form.username }}
    {{ form.username.errors }}
    

    等等

    还请注意,您实际上并未在 is_valid 块中调用 save 方法。你需要做的:

    form.save()
    

    【讨论】:

    • 在我添加这些之后,它说这个字段在密码字段中是必需的,所以它不会从这些字段中输入。
    • 您已将 HTML 模板中的密码字段命名为“pass1”和“pass2”。 Django 无法将它们与实际密码字段相关联。另请注意,您没有任何代码来验证 pass1 == pass2。
    【解决方案2】:

    确保通过name 属性get 输入元素。这是因为request.POST['keyword']引用了指定htmlname属性keyword标识的元素。

    这是一个例子:

    <form action="/login/" method="POST"> <input type="text" name="keyword" placeholder="Search query"> <input type="number" name="results" placeholder="Number of results"> </form>

    在获取输入元素值的 Python 文件中,request.POST['keyword']request.POST['results'] 将分别包含 keywordresults 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      相关资源
      最近更新 更多