Flask 在wtforms中填充密码字段
是否可以在flask中的wtforms中填充密码字段 我试过这个:Flask 在wtforms中填充密码字段,flask,wtforms,Flask,Wtforms,是否可以在flask中的wtforms中填充密码字段 我试过这个: capform = RECAPTCHA_Form() capform.username.data = username capform.password.data = password 表单的定义如下: class RECAPTCHA_Form(Form): username = TextField('username', validators=[DataRequired()]) password = Pas
capform = RECAPTCHA_Form()
capform.username.data = username
capform.password.data = password
表单的定义如下:
class RECAPTCHA_Form(Form):
username = TextField('username', validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired()])
remember_me = BooleanField('Remember me.')
recaptcha = RecaptchaField()
模板如下所示:
<form method="POST" action="">
{{ form.hidden_tag() }}
{{ form.username(size=20) }}
{{ form.password(size=20) }}
{% for error in form.recaptcha.errors %}
<p>{{ error }}</p>
{% endfor %}
{{ form.recaptcha }}
<input type="submit" value="Go">
</form>
{{form.hidden_tag()}}
{{form.username(size=20)}
{{form.password(大小=20)}
{form.recaptcha.errors%%中的错误为%
{{error}}
{%endfor%}
{{form.recaptcha}}
我尝试将密码字段
更改为文本字段
,然后它就可以工作了
在wtforms中填充密码字段是否有一些特殊限制?我在Flask和Flask应用程序中发现,一般来说,源代码是文档。实际上,在默认情况下,似乎无法填充该字段。您可以传递一个参数
hide\u value
来防止这种行为
这是一个很好的调用,因为如果可以填充字段,则可以访问原始密码。。。这可能很危险
class PasswordInput(Input):
"""
Render a password input.
For security purposes, this field will not reproduce the value on a form
submit by default. To have the value filled in, set `hide_value` to
`False`.
"""
input_type = 'password'
def __init__(self, hide_value=True):
self.hide_value = hide_value
def __call__(self, field, **kwargs):
if self.hide_value:
kwargs['value'] = ''
return super(
我相信有一种更简单的方法可以访问密码字段的数据,而无需使用
hide\u value
。在您看来,只需将请求数据作为参数添加到表单的构造函数中:
from flask import request
capform = RECAPTCHA_Form(request.form)
capform.username.data = username
capform.password.data = password
这将使密码输入可用于验证,并在需要时用于测试。更新:查看WTForms文档后,我找到了更好的解决方案
正如tomita tomita yuji所指出的,
PasswordInput
类()有一个hide\u值
参数,但是PasswordField
()的构造函数不会将其转发给PasswordInput
。下面是一个PasswordField
类,它使用hide\u value=False
初始化PasswordInput
:
from wtforms import widgets
from wtforms.fields.core import StringField
class PasswordField(StringField):
"""
Original source: https://github.com/wtforms/wtforms/blob/2.0.2/wtforms/fields/simple.py#L35-L42
A StringField, except renders an ``<input type="password">``.
Also, whatever value is accepted by this field is not rendered back
to the browser like normal fields.
"""
widget = widgets.PasswordInput(hide_value=False)
从wtforms导入小部件
从wtforms.fields.core导入StringField
类密码字段(StringField):
"""
原始资料来源:https://github.com/wtforms/wtforms/blob/2.0.2/wtforms/fields/simple.py#L35-L42
StringField,但渲染```除外。
此外,此字段接受的任何值都不会返回
与普通字段一样,将其添加到浏览器。
"""
widget=widgets.PasswordInput(hide\u value=False)
谢谢!成功了。请注意,PasswordInput
小部件通过widget
关键字参数传递给PasswordField
。
from wtforms import widgets
from wtforms.fields.core import StringField
class PasswordField(StringField):
"""
Original source: https://github.com/wtforms/wtforms/blob/2.0.2/wtforms/fields/simple.py#L35-L42
A StringField, except renders an ``<input type="password">``.
Also, whatever value is accepted by this field is not rendered back
to the browser like normal fields.
"""
widget = widgets.PasswordInput(hide_value=False)