Python 使用烧瓶上载和烧瓶WTF上载未通过验证
我似乎无法理解为什么一个字段在另一个字段成功上传文件时失败。我可以上传一张照片很好。。。但当涉及到pdf时,我无法让它通过验证。我已经搜遍了我的代码,找不到任何错误。有趣的是,我可以通过手动上传设置上传照片,这对我来说毫无意义。我猜我是如何配置flask wtf和flask上传的,但鉴于网上没有关于如何将两者结合使用的文档,我不得不尽我所能 任何帮助都将不胜感激,因为我需要上传PDF,这让我感到困惑 代码如下。。。非常感谢 config.pyPython 使用烧瓶上载和烧瓶WTF上载未通过验证,python,validation,upload,flask,flask-wtforms,Python,Validation,Upload,Flask,Flask Wtforms,我似乎无法理解为什么一个字段在另一个字段成功上传文件时失败。我可以上传一张照片很好。。。但当涉及到pdf时,我无法让它通过验证。我已经搜遍了我的代码,找不到任何错误。有趣的是,我可以通过手动上传设置上传照片,这对我来说毫无意义。我猜我是如何配置flask wtf和flask上传的,但鉴于网上没有关于如何将两者结合使用的文档,我不得不尽我所能 任何帮助都将不胜感激,因为我需要上传PDF,这让我感到困惑 代码如下。。。非常感谢 config.py UPLOADED_MANUALS_DEST = "C
UPLOADED_MANUALS_DEST = "C:/pyprojects/cc/uploads/eq_manuals/"
UPLOADED_MANUALS_ALLOW = 'pdf'
UPLOADED_PHOTOS_DEST = "C:/pyprojects/cc/uploads/eq_photos/"
UPLOADED_PHOTOS_ALLOW = 'png, jpg, jpeg'
from flaskext.uploads import UploadSet, configure_uploads, patch_request_class
photos = UploadSet('photos')
manuals = UploadSet('manuals')
configure_uploads(app, (photos, manuals))
patch_request_class(app)
class EQForm(Form):
name = StringField('Name', validators=[Required('Equipment Name is required.')])
photo = FileField('Equipment Photo', validators=[
FileAllowed(photos, 'Photo must be a png, jpg, or jpeg!')])
manual = FileField('Equipment Manual', validators=[
FileAllowed(manuals, 'Manual must be a pdf!')])
@app.route('/admin/equipment/', methods=['GET', 'POST'])
@roles_accepted('admin')
def equipment():
eqform = EQForm()
if eqform.validate_on_submit():
# os.path.join() the secured filename and the root path from config.py imported as join()
new_eq = Equipment(name = eqform.name.data)
if eqform.photo.data:
photo_path = join(
app.config['UPLOADED_PHOTOS_DEST'],
secure_filename(eqform.photo.data.filename)
)
eqform.photo.data.save(photo_path)
new_eq.photo_path = photo_path
if eqform.manual.data:
manual_path = join(
app.config['UPLOADED_MANUALS_DEST'],
secure_filename(eqform.manual.data.filename)
)
eqform.manual.data.save(manual_path)
new_eq.manual_path = manual_path
db.session.add(new_eq)
db.session.commit()
equipment = Equipment.query.all()
return render_template('equipment.html',
title="Equipment Database",
equipment = equipment,
eqform = eqform
)
\uuuu init\uuuuu.py
UPLOADED_MANUALS_DEST = "C:/pyprojects/cc/uploads/eq_manuals/"
UPLOADED_MANUALS_ALLOW = 'pdf'
UPLOADED_PHOTOS_DEST = "C:/pyprojects/cc/uploads/eq_photos/"
UPLOADED_PHOTOS_ALLOW = 'png, jpg, jpeg'
from flaskext.uploads import UploadSet, configure_uploads, patch_request_class
photos = UploadSet('photos')
manuals = UploadSet('manuals')
configure_uploads(app, (photos, manuals))
patch_request_class(app)
class EQForm(Form):
name = StringField('Name', validators=[Required('Equipment Name is required.')])
photo = FileField('Equipment Photo', validators=[
FileAllowed(photos, 'Photo must be a png, jpg, or jpeg!')])
manual = FileField('Equipment Manual', validators=[
FileAllowed(manuals, 'Manual must be a pdf!')])
@app.route('/admin/equipment/', methods=['GET', 'POST'])
@roles_accepted('admin')
def equipment():
eqform = EQForm()
if eqform.validate_on_submit():
# os.path.join() the secured filename and the root path from config.py imported as join()
new_eq = Equipment(name = eqform.name.data)
if eqform.photo.data:
photo_path = join(
app.config['UPLOADED_PHOTOS_DEST'],
secure_filename(eqform.photo.data.filename)
)
eqform.photo.data.save(photo_path)
new_eq.photo_path = photo_path
if eqform.manual.data:
manual_path = join(
app.config['UPLOADED_MANUALS_DEST'],
secure_filename(eqform.manual.data.filename)
)
eqform.manual.data.save(manual_path)
new_eq.manual_path = manual_path
db.session.add(new_eq)
db.session.commit()
equipment = Equipment.query.all()
return render_template('equipment.html',
title="Equipment Database",
equipment = equipment,
eqform = eqform
)
forms.py
UPLOADED_MANUALS_DEST = "C:/pyprojects/cc/uploads/eq_manuals/"
UPLOADED_MANUALS_ALLOW = 'pdf'
UPLOADED_PHOTOS_DEST = "C:/pyprojects/cc/uploads/eq_photos/"
UPLOADED_PHOTOS_ALLOW = 'png, jpg, jpeg'
from flaskext.uploads import UploadSet, configure_uploads, patch_request_class
photos = UploadSet('photos')
manuals = UploadSet('manuals')
configure_uploads(app, (photos, manuals))
patch_request_class(app)
class EQForm(Form):
name = StringField('Name', validators=[Required('Equipment Name is required.')])
photo = FileField('Equipment Photo', validators=[
FileAllowed(photos, 'Photo must be a png, jpg, or jpeg!')])
manual = FileField('Equipment Manual', validators=[
FileAllowed(manuals, 'Manual must be a pdf!')])
@app.route('/admin/equipment/', methods=['GET', 'POST'])
@roles_accepted('admin')
def equipment():
eqform = EQForm()
if eqform.validate_on_submit():
# os.path.join() the secured filename and the root path from config.py imported as join()
new_eq = Equipment(name = eqform.name.data)
if eqform.photo.data:
photo_path = join(
app.config['UPLOADED_PHOTOS_DEST'],
secure_filename(eqform.photo.data.filename)
)
eqform.photo.data.save(photo_path)
new_eq.photo_path = photo_path
if eqform.manual.data:
manual_path = join(
app.config['UPLOADED_MANUALS_DEST'],
secure_filename(eqform.manual.data.filename)
)
eqform.manual.data.save(manual_path)
new_eq.manual_path = manual_path
db.session.add(new_eq)
db.session.commit()
equipment = Equipment.query.all()
return render_template('equipment.html',
title="Equipment Database",
equipment = equipment,
eqform = eqform
)
视图.py
UPLOADED_MANUALS_DEST = "C:/pyprojects/cc/uploads/eq_manuals/"
UPLOADED_MANUALS_ALLOW = 'pdf'
UPLOADED_PHOTOS_DEST = "C:/pyprojects/cc/uploads/eq_photos/"
UPLOADED_PHOTOS_ALLOW = 'png, jpg, jpeg'
from flaskext.uploads import UploadSet, configure_uploads, patch_request_class
photos = UploadSet('photos')
manuals = UploadSet('manuals')
configure_uploads(app, (photos, manuals))
patch_request_class(app)
class EQForm(Form):
name = StringField('Name', validators=[Required('Equipment Name is required.')])
photo = FileField('Equipment Photo', validators=[
FileAllowed(photos, 'Photo must be a png, jpg, or jpeg!')])
manual = FileField('Equipment Manual', validators=[
FileAllowed(manuals, 'Manual must be a pdf!')])
@app.route('/admin/equipment/', methods=['GET', 'POST'])
@roles_accepted('admin')
def equipment():
eqform = EQForm()
if eqform.validate_on_submit():
# os.path.join() the secured filename and the root path from config.py imported as join()
new_eq = Equipment(name = eqform.name.data)
if eqform.photo.data:
photo_path = join(
app.config['UPLOADED_PHOTOS_DEST'],
secure_filename(eqform.photo.data.filename)
)
eqform.photo.data.save(photo_path)
new_eq.photo_path = photo_path
if eqform.manual.data:
manual_path = join(
app.config['UPLOADED_MANUALS_DEST'],
secure_filename(eqform.manual.data.filename)
)
eqform.manual.data.save(manual_path)
new_eq.manual_path = manual_path
db.session.add(new_eq)
db.session.commit()
equipment = Equipment.query.all()
return render_template('equipment.html',
title="Equipment Database",
equipment = equipment,
eqform = eqform
)
设备.html
<form action="" method="POST" enctype="multipart/form-data" class="eq-field hide" name="eqform">
{{ eqform.hidden_tag() }}
<ul class="list-group">
<li class="list-group-item">
{{ eqform.name.label }}: {{ eqform.name }}
</li>
<li class="list-group-item">
{{ eqform.photo.label }}: {{ eqform.photo }} <br>
<span style="font-size:.75em;">Photo must be a png, jpg, or jpeg.</span>
</li>
<li class="list-group-item">
{{ eqform.manual.label }}: {{ eqform.manual }} <br>
<span style="font-size:.75em;">Manual must be a pdf.</span>
</li>
</ul>
<input type="submit" class="btn btn-default" value="Submit">
</form>
{{eqform.hidden_tag()}}
-
{{eqform.name.label}}:{{eqform.name}
-
{{eqform.photo.label}:{{{eqform.photo}}
照片必须是png、jpg或jpeg格式。
-
{{eqform.manual.label}}:{{{eqform.manual}}
手册必须是pdf格式。
我犯了一个愚蠢的错误:
UPLOADED_MANUALS_ALLOW = 'pdf'
UPLOADED_PHOTOS_ALLOW = 'png, jpg, jpeg'
这两个我声明为字符串的允许扩展列表。。。将其更改为:
UPLOADED_MANUALS_ALLOW = ('pdf')
UPLOADED_PHOTOS_ALLOW = ('png', 'jpg', 'jpeg')
然而,值得注意的是:该列表仍然无法处理单个项目,因此我必须添加两个:
上传的手册允许=('pdf','pdf')
我一直在玩shell中的上传集。我的问题似乎与我的应用程序没有正确使用配置中设置的项目有关。我的两个上传集中似乎都有默认的允许扩展列表,而不是我定义的那些。。。事情总是那么愚蠢。我把我的扩展列表作为一个字符串。将“png,jpg,jpeg”更改为(“png”,“jpg”,“jpeg”),瞧!值得注意的是。。。有一个扩展名的列表在我的pdf中仍然不起作用。。。所以我不得不把它做成('pdf','pdf'),我认为“列表仍然不能处理单个项目”只是Python元组的问题。请尝试
upload\u MANUALS\u ALLOW='pdf',
或upload\u MANUALS\u ALLOW=('pdf',)