Django没有从html POST表单中获取输入

时间:2015-11-16 14:56:27

标签: python html django post

我有这个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没有从表单字段中获取输入。

2 个答案:

答案 0 :(得分:3)

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

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

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

form.save()

答案 1 :(得分:0)

请确保使用get属性的name输入元素。这是因为request.POST['keyword']是指由指定的html name属性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的值。