我有这个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没有从表单字段中获取输入。
答案 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']
将分别包含keyword
和results
的值。