我正在使用Flask WTForm,并尝试使用form.data
从flask flask WTForm中获取数据,但返回的字段之一是csrf_token
。
我的文件结构如下
$ tree .
.
└── testing_app
├── __init__.py
├── forms.py
├── templates
│ ├── index.html
│ └── submit.html
└── views.py
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
name = StringField('name', validators=[DataRequired()])
views.py
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')
index.html
<html>
this is index page
</html>
submit.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
并单击名称为test
的ok
时,它将重定向到http://127.0.0.1:5000/
,并将数据记录为
--------------------------------------------------------------------------------
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 -
有没有办法在不使用csrf_token
的情况下获得data
我知道,我可以访问form.name
,但在我必须尝试的地方,它有15
字段,我尽量避免对每个字段都这样做。
我也可以这样做
for key, value in form.data.items():
if key == 'csrf_token`:
continue
# process with other data
但是如果我们在Form
中添加SubmitField
,form.data
也会返回它。
我正在寻找烧瓶的方式,从表单中只获得string
或selection
字段。
发布于 2018-10-26 17:34:24
form对象有一个_fields属性,该属性包含表单中的所有字段。如果您遍历此字段,您将可以访问字段名称、数据和类型,并且您可以构建自己的数据字典,其中只包含您想要的字段类型。下面的方法应该是可行的。
data = {field.name: field.data for field in form._fields.values() if type(field) in (StringField, SelectField)}
发布于 2018-10-26 05:56:57
如果数据在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)
https://stackoverflow.com/questions/52997336
复制相似问题