python - How to link uploaded-file from a form to a model with Flask? -


i working on basic ecommerce platform learning purposes. , i've stumbled across difficulties couldn't find book or resources answers it. however, sure there should easier solution didn't recognise...

the aim upload file along other form data database, file linked product id. below example,

class productform(form):     name = stringfield('design', validators=[required()])     series = selectfield('collection', choices=[(c.id, c.name) c in series.query.all()], coerce=int)     material = selectfield('material', choices=[(c.id, c.name) c in material.query.all()], coerce=int)     purity = selectfield('purity', choices=[(c.id, c.name) 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 display') 

i know photo should stored in folder rather within database, problem have no idea how refer photo's location within database, below db product,

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) 

also, below product part of 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) 

anyone care weigh in on this? make day.

in form posting data have give enctype=multipart/form-data like,

<form action="/admin" method="post" enctype="multipart/form-data" >

in application have give path of upload directory,

upload_folder = '/path/to/the/uploads/'

and specify in application's config in case,

main.config['upload_folder'] = upload_folder

check documentation.

you can give name of file uniquely generated name , insert filename column in row in database. or can name id of row inserting. way can find file item. used first method in case , generated unique filename using uuid.


Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -