Python Django模型表单无POST数据
我已经看到了关于堆栈溢出的其他问题与此类似,但非常不同,所以请不要这么快投票结束。基本上,我一直在尝试按照我在每一个在线教程中找到的技术制作一个非常简单的登录表单。由于某些原因,填写和提交表单不会返回任何POST请求数据。这是我的密码: 看法 模板Python Django模型表单无POST数据,python,django,django-forms,django-users,Python,Django,Django Forms,Django Users,我已经看到了关于堆栈溢出的其他问题与此类似,但非常不同,所以请不要这么快投票结束。基本上,我一直在尝试按照我在每一个在线教程中找到的技术制作一个非常简单的登录表单。由于某些原因,填写和提交表单不会返回任何POST请求数据。这是我的密码: 看法 模板 <!DOCTYPE html> <html lang = "en"> <head> <meta charset = "UTF-8"> <title>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Sign into Account</title>
</head>
<body>
<form method = "POST">
{% csrf_token %}
{{ form }}
<input type = "submit" value = "Sign In">
</form>
</body>
</html>
我正在使用Django提供的
User
类,由于某种原因,在提交完成的表单时,没有返回POST数据,因此有效的原因总是失败。有什么想法吗?试着像这样编辑您的视图
def signin(request):
if request.method == 'POST':
form = SignOnForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('url of some page')
return HttpResponse("Error {}".format(form.errors)
else:
form = SignOnForm()
return render(request, 'signon.html', dict(form=form))
我想我已经发现了这个问题。模型表单希望在完成后保存数据。因此,此表单尝试使用现有用户名创建重复用户失败,这就是它面临的错误
解决办法是什么?继承自forms.Form
,而不是forms.ModelForm
,并手动列出用户名和密码字段。您不应该将模型附加到表单以避免此错误。这可能是最新版本中的一项新功能,因为我从未见过它。您的操作在表单模板中的何处?我尝试使用操作“/sign/”
,但没有任何效果。我尝试了您的代码,并且正确接收了帖子数据。而且是否有效
没有失败,因此您将获得响应中包含用户名和密码的页面?是。这是正确的。它向你展示了什么?返回HttpResponse(“Error{}.format(request.POST))
显示了什么?同样,如果表单无效,则条件下的语句无关紧要。
class SignOnForm(forms.ModelForm):
password = forms.CharField(widget = forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'password']
def signin(request):
if request.method == 'POST':
form = SignOnForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('url of some page')
return HttpResponse("Error {}".format(form.errors)
else:
form = SignOnForm()
return render(request, 'signon.html', dict(form=form))