我正在使用Flask WTForm,并尝试使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" type="text/javascript"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js" type="text/javascript"></script>
从烧瓶烧瓶WTForm中获取数据,但该字段之一返回form.data
。
我的文件结构如下
csrf_token
forms.py
$ tree .
.
└── testing_app
├── __init__.py
├── forms.py
├── templates
│ ├── index.html
│ └── submit.html
└── views.py
views.py
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
name = StringField('name', validators=[DataRequired()])
index.html
from flask import Flask, render_template, redirect
from testing_app import forms
app = Flask(__name__)
app.config['SECRET_KEY'] = b'randomkey'
@app.route('/submit', methods=('GET', 'POST'))
def submit():
form = forms.MyForm()
if form.validate_on_submit():
app.logger.debug(form.data)
return redirect('/')
return render_template('submit.html', form=form)
@app.route('/', methods=('GET', 'POST'))
def index():
return render_template('index.html')
submit.html
<html>
this is index page
</html>
我使用
<form method="POST" action="/submit">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name(size=20) }}
<input type="submit" value="Go">
</form>
当我转到export FLASK_APP=testing_app/views.py
export FLASK_DEBUG=1
flask run
* Serving Flask app "testing_app.views"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 245-821-651
并单击名称为http://127.0.0.1:5000/submit
的{{1}}时,它将重定向到ok
并以
test
有没有没有http://127.0.0.1:5000/
的{{1}}的方法?
我知道,我可以访问--------------------------------------------------------------------------------
DEBUG in views [/Users/nile2691/my_tests/testing_app/views.py:13]:
{'csrf_token': 'TOKEN', 'name': 'test'}
--------------------------------------------------------------------------------
127.0.0.1 - - [25/Oct/2018 15:03:34] "POST /submit HTTP/1.1" 302 -
127.0.0.1 - - [25/Oct/2018 15:03:34] "GET / HTTP/1.1" 200 -
,但是我必须尝试的地方是它有data
个字段,而我试图避免对每个字段都做。
我也可以喜欢
csrf_token
但是如果我们在form.name
中添加15
,for key, value in form.data.items():
if key == 'csrf_token`:
continue
# process with other data
也将返回该值。
我正在寻找烧瓶方式,仅从表单中获取SubmitField
或Form
字段。
答案 0 :(得分:1)
如果您的所有数据在Flask-WTF中均有效,则访问为
form.name_of_input_field.data
在您的示例中是:
form = forms.MyForm()
if form.validate_on_submit():
app.logger.debug(form.name.data) # not form.data
return redirect('/')
return render_template('submit.html', form=form)
答案 1 :(得分:1)
表单对象具有_fields属性,该属性包含表单中的所有字段。如果您对此进行迭代,则可以访问字段名称,数据和类型,并且可以构建仅包含所需字段类型的数据字典。以下应该起作用。
data = {field.name: field.data for field in form._fields.values() if type(field) in (StringField, SelectField)}