flask_uploads: ImportError: cannot import name 'secure_filename'

flask_uploads: ImportError: cannot import name 'secure_filename'

我想创建一个表单,允许使用 Flask 表单发送带有描述的图片。 我尝试使用此视频:https://www.youtube.com/watch?v=Exf8RbgKmhM

但是我在启动时遇到了麻烦 app.py:

➜  website git:(master) ✗ python3.6 app.py
Traceback (most recent call last):
  File "app.py", line 10, in <module>
    from flask.ext.uploads import UploadSet, configure_uploads, IMAGES
ModuleNotFoundError: No module named 'flask.ext'

我不得不更换 flask.ext.uploads 来自 flask_uploads 但现在我得到:

Traceback (most recent call last):
  File "app.py", line 10, in <module>
    from flask_uploads import UploadSet, configure_uploads, IMAGES
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask_uploads.py", line 26, in <module>
    from werkzeug import secure_filename, FileStorage
ImportError: cannot import name 'secure_filename'

我的导入和配置如下所示:

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, session, render_template, url_for, redirect, flash, request
from wtforms import Form, fields,TextField, StringField, PasswordField, BooleanField,validators
from wtforms.validators import InputRequired, Email, Length, DataRequired
from flask_wtf import FlaskForm
from flask_uploads import UploadSet, configure_uploads, IMAGES
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

我无法解决这个问题,你知道我能做什么吗?

根据this issue,这是一个与当前workzeug 1.0.0版本相关的错误。它已合并但尚未在 pypi 中发布。 到目前为止知道的解决方法是从 werkzeug=1.0.0 降级到 werkzeug==0.16.0

因此,您只需要 运行 命令:

pip install -U Werkzeug==0.16.0

查看 werkzeug 的发行说明有一个版本 0.16.1,但在错误报告中没有证据表明使用该版本会有任何帮助。

我无法通过 flask-upload 解决问题,但观看了这个视频,它让我可以做我想做的事:https://www.youtube.com/watch?v=6WruncSoCdI

flask_uploads.py

改变

from werkzeug import secure_filename,FileStorage

from werkzeug.utils import secure_filename
from werkzeug.datastructures import  FileStorage

您使用的是 Flask-Uploads 的损坏版本。

不幸的是,包的维护者决定不向 PyPi 发布包的新版本。

您可以使用 Flask-Reuploaded 作为替代品,这可以解决您的问题。

https://pypi.org/project/Flask-Reuploaded/

我最后放了一个

-e git://github.com/maxcountryman/flask-uploads.git#egg=elasticutils

在我的 requirements.txt 文件中从 git 获取最新版本的 flask-uploads。