0
user_edit_profile.html:無法獲得數據從WTForms FormField回validate_on_submit
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block mainbody %}
<div class="container">
<div class="col-md-8 col-md-offset-2">
<div class="page-header">
<h3>{{ _('User Edit Profile') }}</h3>
</div>
<div>
{{ wtf.quick_form(form, form_type="horizontal", horizontal_columns=('md', 3, 9)) }}
</div>
</div>
</div>
{% endblock %}
forms.py
from flask_wtf import FlaskForm
from wtforms import Form
class UserBasicInfoForm(Form):
surname = StringField(lazy_gettext("Surname"), validators=[Length(0, 64)])
class UserEditProfileForm(FlaskForm):
basic_information = FormField(UserBasicInfoForm)
submit = SubmitField(lazy_gettext("Submit"), id="user_edit_profile_submit")
user.py
@user.route("/edit-profile", methods=["GET", "POST"])
@login_required
def edit_profile():
form = UserEditProfileForm()
form.basic_information.surname.data = current_user.surname
if form.validate_on_submit():
current_user.surname = form.basic_information.surname.data
print(form.basic_information.surname.data)
current_user.save()
return redirect(url_for("frontend.index"))
return render_template("user_edit_profile.html", form=form)
我沒有粘貼models.py
,因爲它運行良好,我認爲沒有問題。
現在,print(form.basic_information.surname.data)
反饋None
,這意味着我無法從wtf格式的surname
字段中輸入任何內容。
當我使用Charles來捕獲數據包時,我發現客戶端確實已將輸入內容(如「Smith」)發送到服務器。但顯然,服務器丟失了它。
我也試圖通過使用FlaskForm
,而不是Form
子窗體的同時我重寫csrf_enabled
參數傳遞給False
:
def __init__(self, *args, **kwargs):
kwargs['csrf_enabled'] = False
FlaskForm.__init__(self, *args, **kwargs)
但這並沒有幫助。
我不知道問題出在哪裏,謝謝你的幫助!
這確實解決了我的問題。我以前對'validate_on_submit'的理解是錯誤的。謝謝! – urbainy