Python 使用FileField wtforms上载文件时,将文件名存储在列中
我有一个使用以下代码的表,其中包括两列:name和filename。我的问题是,当我上传文件时,它的文件名存储在文件名列中。我该怎么做? 现在,当我上传文件时,文件名中会显示“无”。我只能上传文件或在数据库中输入名称,我认为问题在于enctype=“multipart/form data”。 来自flask_wtf进口FlaskFormPython 使用FileField wtforms上载文件时,将文件名存储在列中,python,flask,Python,Flask,我有一个使用以下代码的表,其中包括两列:name和filename。我的问题是,当我上传文件时,它的文件名存储在文件名列中。我该怎么做? 现在,当我上传文件时,文件名中会显示“无”。我只能上传文件或在数据库中输入名称,我认为问题在于enctype=“multipart/form data”。 来自flask_wtf进口FlaskForm from flask_wtf.file import FileField from wtforms import StringField,SelectField
from flask_wtf.file import FileField
from wtforms import StringField,SelectField,IntegerField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import DataRequired, Email, Length
class ContactForm(FlaskForm):
name = IntegerField('name', validators=[Length(min=-1, max=100, message='You cannot have more than 100 characters')])
filename = FileField()
这是我的app.py:
def new_contact():
'''
Create new contact
'''
form = ContactForm()
if form.validate_on_submit():
return render_template('web/new_contact.html',form = form)
f = form.filename.data
f.save(os.path.join("./static/upload/", f.filename))
return redirect(url_for('new_contact'))
print(f)
my_contact = Contact()
form.populate_obj(my_contact)
db.session.add(my_contact)
try:
db.session.commit()
# User info
flash('Contact created correctly', 'success')
return redirect(url_for('contacts'))
except:
db.session.rollback()
flash('Error generating contact.', 'danger')
return render_template('web/new_contact.html', form=form)
由于您提供的信息有限,我将尝试实现您想要的功能 您的
联系人表单可以保持这种状态:
class ContactForm(FlaskForm):
name = IntegerField('File Name', validators=[Length(min=-1, max=100, message='You cannot have more than 100 characters')])
filename = FileField()
然后将表单对象从自定义flask route传递到模板,我们调用它来解释,contact route:
在我在本例中调用的模板中,contact.html
,呈现表单:
<form action="" method="post" enctype="multipart/form-data">
{{ contact_form.csrf_token }}
{{ contact_form.name }}
{{ contact_form.filename}}
<input type="submit"/>
</form>
我们已成功地从表单收集数据,并将文件以静态形式保存在contacts文件夹中,文件名来自表单。也许我们还可以使用werkzeug.utils
中的secure\u filename
,谢谢,但我有一个问题,当我使用enctype=“multipart/form data”时,我无法将数据插入数据库,只能上传文件。
<form action="" method="post" enctype="multipart/form-data">
{{ contact_form.csrf_token }}
{{ contact_form.name }}
{{ contact_form.filename}}
<input type="submit"/>
</form>
@app.route('/contact')
def contact():
contact_form = ContactForm()
if form.validate_on_submit():
f = contact_form.filename.data
name = contact_form.name.data
f.save(os.path.join("./static/contacts/", name))
redirect(url_for('contact'))
return render_template('contact.html'
contact_form = contact_form)