我很难在提交的Flask应用中的WTForms页面中获取当前所选项目。无论SelectField中的哪个项目被选中,form.tableselector.data值在提交时总是等于1(并且所有选项都有1-10个表单中唯一的表ID(1,'table_name'),其中1是一个整数。
这是当前代码:
views.py
from flask import session
def view(self):
form = Tableset(request.form)
if request.method == 'POST' and form.validate():
#form.tableselector.data always returns 1 no matter which item is selected?
session['table_id'] = form.tableselector.data
form.py
class MyBaseForm(Form):
#see https://wtforms.readthedocs.io/en/latest/csrf.html
class Meta:
csrf = True
csrf_class = SessionCSRF
csrf_secret = app.config.get('SECRET_KEY')
@property
def csrf_context(self):
return session
class Tableset(MyBaseForm):
tableselector = SelectField(label = 'Table', choices = [], coerce=int, id='select_table')
submit = SubmitField('Submit')
def validate(self):
if len(self.tableselector.choices) == 0:
return False
return True
tableview.html
<form role="form" action="{{ url_for('app.table_view') }}" method="post">
{{ form.csrf_token }}
<div class="form-group">
{{ form.tableselector.label }}
{{ form.tableselector }}
</div>
我注意到在调试表单时,wtf元对象的csrf属性等于True,所以我知道CSRF正在工作。
答案 0 :(得分:0)
问题是我在视图中调用了错误的参数。
见这里:How to obtain values of request variables using Python and Flask
使用:
if request.method == 'POST' and form.validate():
session['table_id'] = request.form.get('tableselector')