是否可以在烧瓶中的wtforms中填充密码字段?
我已经试过了:
capform = RECAPTCHA_Form()
capform.username.data = username
capform.password.data = password
Run Code Online (Sandbox Code Playgroud)
形式定义如下:
class RECAPTCHA_Form(Form):
username = TextField('username', validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired()])
remember_me = BooleanField('Remember me.')
recaptcha = RecaptchaField()
Run Code Online (Sandbox Code Playgroud)
模板如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
我尝试将更PasswordField改为TextField,然后可以使用。
在wtforms中填充PasswordFields有一些特殊限制吗?
更新:在浏览 WTForms 文档后,我找到了一个更好的解决方案。有一个小部件 arg。
from wtforms import StringField
from wtforms.widgets import PasswordInput
class MyForm(Form):
# ...
password = StringField('Password', widget=PasswordInput(hide_value=False))
Run Code Online (Sandbox Code Playgroud)
正如 yuji-tomita-tomita 所指出的,PasswordInput类(source)有一个hide_value参数,但是PasswordField(source)的构造函数没有将它转发到PasswordInput. 这里是一个PasswordField初始化类PasswordInput有hide_value=False:
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)
Run Code Online (Sandbox Code Playgroud)
我在 Flask 和 Flask 应用程序中发现的一些东西是,源是文档。实际上,默认情况下您无法填充该字段。您可以传递一个参数hide_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(
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4256 次 |
| 最近记录: |