Вывод изображений на странице из БД во flask
Пишу небольшой веб-сервис на flask. Суть в том, что я хочу хранить загружаемые изображения в БД, осуществляю это с помощью перевода изображения в массив байт и обратно. Но при выводе изображений, вместо самого изображения отображается список. Например :<Images (transient 1778207821392)>
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:rjhjvsckjd99@localhost:5432/web'
app.config['UPLOAD_PATH'] = 'photos'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY
db = SQLAlchemy(app)
class UploadForm(FlaskForm):
photo = FileField('Image', validators=[
FileRequired(),
FileAllowed(['png', 'pdf', 'jpg'], 'Image only!')
])
submit = SubmitField('Submit')
class Images(db.Model):
__tablename__ = "imgs"
id = db.Column(db.Integer, primary_key=True, nullable=False)
img = db.Column(db.LargeBinary)
date = db.Column(db.DateTime, default=datetime.utcnow)
covid = db.Column(db.Boolean)
def _repr_(self):
return '<Images %r>' % self.id
@app.route('/')
def index():
return render_template("index.html")
@app.route('/upload', methods=['GET', 'POST'])
def upload():
form = UploadForm()
if form.validate_on_submit() and 'photo' in request.files:
for f in request.files.getlist('photo'):
#filename = secure_filename(f.filename)
#f.save(os.path.join(app.config['UPLOAD_PATH'], filename))
img = f.stream.read()
covid = True
images = Images(img=img, covid=covid)
try:
db.session.add(images)
db.session.commit()
return redirect('/')
except:
return "Upload Error"
return render_template('upload.html', form=form)
@app.route('/download')
def download():
img = Images.query.filter_by(id = 1).first()
newimg = BytesIO(img.img)
covid = img.covid
img = Images(img=newimg,covid=covid)
return render_template("image.html",data = img)
#TODO: Сделать отображение фото на странице
@app.route('/user/<string:name>/<int:id>')
def user(name, id):
return "User page: " + name + "-" + str(id)
if __name__ == '__main__':
app.run(debug=True)