Flask-WTF 1.0.1无法导入CsrfProtect的问题求助
问题描述
更新Python项目依赖后出现导入错误:
ImportError: cannot import name 'CsrfProtect' from 'flask_wtf.csrf'
相关细节
requirements.txt
Flask-WTF==1.0.1
extensions.py代码
from flask_wtf.csrf import CsrfProtect from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager debug_toolbar = DebugToolbarExtension() mail = Mail() csrf = CsrfProtect() db = SQLAlchemy() login_manager = LoginManager()
错误追踪
website_1 | File "/smartcowz/smartcowz/blueprints/user/models.py", line 17, in <module> website_1 | from lib.util_sqlalchemy import ResourceMixin, AwareDateTime website_1 | File "/smartcowz/lib/util_sqlalchemy.py", line 7, in <module> website_1 | from smartcowz.extensions import db website_1 | File "/smartcowz/smartcowz/extensions.py", line 5, in <module> website_1 | from flask_wtf.csrf import CsrfProtect website_1 | ImportError: cannot import name 'CsrfProtect' from 'flask_wtf.csrf' (/usr/local/lib/python3.8/site-packages/flask_wtf/csrf.py)
已尝试调整导入路径(从wtf改为wtf.csrf)但无效,需要无需降级版本的解决方案,避免依赖循环。
解决方案
Flask-WTF 1.0.0及后续版本中,原CsrfProtect类已被重命名为**CSRFProtect**(首字母大写),这是导致导入失败的直接原因。
修改extensions.py中的导入与实例化代码即可解决问题:
# 替换原导入语句,使用大写的CSRFProtect from flask_wtf.csrf import CSRFProtect # 也可直接从flask_wtf包导入:from flask_wtf import CSRFProtect from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager debug_toolbar = DebugToolbarExtension() mail = Mail() # 实例化大写的CSRFProtect类 csrf = CSRFProtect() db = SQLAlchemy() login_manager = LoginManager()
该改动完全兼容Flask-WTF 1.0.1版本,无需降级依赖,也不会引入新的依赖循环问题。
内容的提问来源于stack exchange,提问作者m2e
相关产品推荐
相关产品推荐

