为啥我在使用cleaned_data 时没有得到干净的数据
Posted
技术标签:
【中文标题】为啥我在使用cleaned_data 时没有得到干净的数据【英文标题】:why I don't get clean data when i use cleaned_data为什么我在使用cleaned_data 时没有得到干净的数据 【发布时间】:2018-06-12 23:27:41 【问题描述】:我正在尝试为我的网站创建一个登录表单,但是当我在 views.py 中使用 clean_data 时,我没有得到正确的数据。 这是我的代码:views.py
def login_page(request):
form = LoginForm(request.POST or None)
context =
'form': form
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_form.get("username")
password = form.cleaned_form.get("password")
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect("/")
else:
print("Error")
return render(request, "auth/login.html", context)
forms.py
class LoginForm(forms.Form):
username = forms.CharField(
widget=forms.TextInput(
attrs=
"class": "form-control",
"placeholder": "Username"
)
)
password = forms.CharField(
widget=forms.PasswordInput(
attrs=
"class": "form-control",
"placeholder": "Password"
)
)
login.html
<form action="POST">% csrf_token %
form
<button type="submit" class="btn btn-default">Submit</button>
</form>
这是我填写用户名和密码字段并单击提交时得到的结果。 print(form.cleaned_data)
显示 url 字段中有我想使用但无法访问的数据。
【问题讨论】:
你不想写username = form.cleaned_data[..
而不是username = form.cleaned_form[..
,即_data而不是_form吗?
是的,你是对的,但这不是真正的问题。我在 forms.py 中更改了一些内容,但在发布之前我忘记更正了。问题在于使用操作而不是方法。
【参考方案1】:
你的观点完全错误,用这个
def login_page(request):
form = LoginForm(request.POST or None)
context =
'form': form
if request.method == 'POST':
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect("/")
else:
print("Error")
else:
print('form not valid')
return render(request, "auth/login.html", context)
和html到
<form method="post" action="">
% csrf_token %
form
<button type="submit" class="btn btn-default">Submit</button>
</form>
【讨论】:
非常感谢,问题是使用动作而不是方法。我检查了我的代码超过 10 次,但我没有注意到。 完成! @Exprator【参考方案2】:您的 HTML 中有错误 - 您应该使用 method="post"
而不是 action
。现在,您在/login/POST
发送带有输入作为查询参数的GET,而不是在/login
发送POST。这在您附加的屏幕截图中很明显。
有效表单应如下所示:
<form method="post">
% csrf_token %
form
<button type="submit" class="btn btn-default">Submit</button>
</form>
【讨论】:
以上是关于为啥我在使用cleaned_data 时没有得到干净的数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在使用 Retrofit2 时得到“Type okhttp3.Call 没有类型参数”?
为啥我在使用 SHFileInfo 时得到错误的 SpecialFolder 图标?
为啥我在 Python 中使用 BeautifulSoup 得到“'ResultSet' 没有属性 'findAll'”?
为啥我在 python 的 sklearn 中使用管道和没有管道得到不同的值