Я только что начал с Flask и пытается сделать регистрационную форму, но flask-wtf/WTForm, похоже, каким-то образом потеряет поле пароля, когда создается форму ответа. Моя форма выглядеть как этотОжидаемое поведение колбы-WTForms?
from flask_wtf import Form
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired
class LoginForm(Form):
name = StringField('name', validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired()])
def validate_password(self, field):
print "password field is {}".format(field)
и вид выглядеть следующим образом:
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
if form.validate_on_submit():
print "** new request"
print "request.values = {}".format(request.values)
print "request.form = {}".format(request.form)
print "form.name = {}".format(form.name)
print "form.password = {}".format(form.password)
print "form.csrf_token = {}".format(form.csrf_token)
# do stuff with form.name and form.password and then render_template as appropiate
return render_template('login.html', form=form)
Когда клиент вывешивает Войти Форма программа печатает это:
password field is <input id="password" name="password" type="password" value=""> # <-- value is empty!
** new request
request.values = CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('csrf_token', u'1444574310##420f08dc670febba20d0a4dfd9085e5f6ad4dded'), ('password', u'hemlis'), ('name', u'kalle')])])
request.form = ImmutableMultiDict([('csrf_token', u'1444574310##420f08dc670febba20d0a4dfd9085e5f6ad4dded'), ('password', u'hemlis'), ('name', u'kalle')])
form.name = <input id="name" name="name" type="text" value="kalle">
form.password = <input id="password" name="password" type="password" value=""> # <-- value is empty!
form.csrf_token = <input id="csrf_token" name="csrf_token" type="hidden" value="1444574315##24eca44ce86f86523ddf9d138f07fc306ed77a96">
Значение поле пароля отсутствует, даже если ему удалось получить значения для имени и csrf_token. Если я изменю тип, если поле пароля на StringField
, значение пароля будет получено формой, как ожидалось, но это не является подходящим решением! :-)
Должен ли я сделать что-то еще здесь, чтобы получить поле пароля, потому что безопасность, или это ошибка где-то?
Кроме того, вот мой requirement.txt
bcrypt==2.0.0
BeautifulSoup==3.2.1
blinker==1.4
cffi==1.2.1
Flask==0.10.1
Flask-Login==0.3.2
Flask-Mail==0.9.1
Flask-Principal==0.4.0
Flask-WTF==0.12
itsdangerous==0.24
Jinja2==2.8
Markdown==2.6.2
MarkupSafe==0.23
micawber==0.3.3
passlib==1.6.5
peewee==2.6.4
pycparser==2.14
six==1.10.0
Werkzeug==0.10.4
wheel==0.24.0
WTForms==2.0.2
use 'form.password.data' – Doobeh
Спасибо! Почему бы вам не ответить? – Kalle