Я использую Flask WTForm и пытаюсь получить данные из колбы WTForm, используя form.data
, но в качестве одного из полей возвращается 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
инажмите на ok
с именем как test
, он перенаправит на 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 -
Есть ли способ получить data
без csrf_token
?
Я знаю, я могу получить доступ к form.name
, но там, где я должен попробовать, у него есть 15
поля, и я стараюсь не делать для каждого поля.
Я также могу сделать как
for key, value in form.data.items():
if key == 'csrf_token`:
continue
# process with other data
но если мы добавим SubmitField
в Form
, form.data
также вернет это.
Я ищу способ фляги, чтобы получить только string
или selection
поле из формы.