我目前正在學習一個非常基礎的電子商務平臺。我偶然發現了一些難以找到答案的書籍或資源。但是,我確信應該有一個更簡單的解決方案,我不承認...如何使用Flask將上傳的文件從表單鏈接到模型?
其目的是將文件與其他表單數據一起上載到數據庫,以便文件鏈接到該產品ID。下面是一個例子,
class ProductForm(Form):
name = StringField('Design', validators=[Required()])
series = SelectField('Collection', choices=[(c.id, c.name) for c in Series.query.all()], coerce=int)
material = SelectField('Material', choices=[(c.id, c.name) for c in Material.query.all()], coerce=int)
purity = SelectField('Purity', choices=[(c.id, c.name) for c in Purity.query.all()], default=['1'], coerce=int)
description = TextAreaField('Description', validators=[Required()])
price = IntegerField('Price', validators=[Required()])
photo = Filefield('Gallery')
submit = SubmitField('Add to Display')
我知道照片應存放在某個文件夾,而不是在數據庫中,問題是,我不知道如何在數據庫內引用該照片的位置,下面是DB的產品,
class Artwork(db.Model):
__tablename__ = 'artworks'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), index=True)
series_id = db.Column(db.Integer, db.ForeignKey('series.id'), default='1')
material_id = db.Column(db.Integer, db.ForeignKey('materials.id'))
purity_id = db.Column(db.Integer, db.ForeignKey('purities.id'))
description = db.Column(db.String)
price = db.Column(db.Integer)
photo = db.Column(??)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
此外,下面是我的view.py
@main.route('/admin', methods=['GET', 'POST'])
def admin():
form = ProductForm()
if form.validate_on_submit():
artwork = Artwork(name=form.name.data, series_id = form.series.data, material_id = form.material.data, purity_id = form.purity.data, description = form.description.data, price = form.price.data)
db.session.add(artwork)
filename = secure_filename(form.uploads.data.filename)
form.uploads.data.save('app/upload/' + filename)
flash('The design have been posted.')
else:
filename = None
return render_template('admin.html', form=form, filename=filename)
任何的產品部件小心權衡對此有何看法?這將使我的一天。
'photo = db.Column(db.String(100))'存儲上傳的'照片'的文件名 – Nava 2014-09-20 06:35:59
是否要將文件保存在數據庫或服務器中的目錄中並將其鏈接到數據庫中? – 2014-09-20 07:13:32
嗨@salmanwahed,感謝您的回覆,我想將該文件保存在一個目錄中,例如app/upload /,但我不確定這是如何工作的。 – Alveus 2014-09-20 09:22:29