from .csrf import CSRFProtect, CsrfProtect SyntaxError

zihanlizi

2022/04/24

《Flask+Web开发》这本书的4.4在视图函数中处理表单程序引入flask_wtf报错

报错

Error
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2021.1.3\plugins\python\helpers\pydev\pydevd.py", line 1483, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "D:/Git/webDev/flask/flasky/hello.py", line 4, in <module>
    from flask_wtf import FlaskForm
  File "C:\Users\k\anaconda3\envs\flask\lib\site-packages\flask_wtf\__init__.py", line 1, in <module>
    from .csrf import CSRFProtect, CsrfProtect
SyntaxError: ('invalid syntax', ('C:\\Users\\k\\anaconda3\\envs\\flask\\lib\\site-packages\\flask_wtf\\csrf.py', 220, 55, "            dest = f'{view.__module__}.{view.__name__}'\n"))
python-BaseException

分析与解决

代码没有问题,是包的版本问题。GOOGLE找到了解决方案:

pip install flask-wtf==0.14.3

项目场景

原代码

from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'

bootstrap = Bootstrap(app)
moment = Moment(app)


class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')


@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404


@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500


@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
    return render_template('index.html', form=form, name=name)