如何解决图像未保存在 flask-admin
我有 2 个尝试使用 flask-admin 将图像保存到数据库的示例。图像从 PC 的管理面板中上传。图像必须默认保存在烧瓶静态文件夹 ('/static') 中。数据库存储姓名和全名(姓名+扩展名)
第一个示例完美运行。
example1.py
import os
from flask import Flask,url_for
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.event import listens_for
from jinja2 import Markup
from flask_admin import Admin,form
from flask_admin.contrib.sqla import ModelView
def create_app():
app = Flask(__name__)
app.config['SECRET_KEY'] = os.environ['SECRET_KEY']
app.config['DATABASE_FILE'] = 'Website.sqlite'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + \
app.config['DATABASE_FILE']
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
db.init_app(app)
admin.init_app(app)
return app
db = SQLAlchemy()
admin = Admin(name='Example: Forms',template_mode='bootstrap4')
app = create_app()
file_path = os.path.join(os.getcwd(),'static')
class Image(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.Unicode(64))
path = db.Column(db.Unicode(128))
@listens_for(Image,'after_delete')
def del_image(mapper,connection,target):
if target.path:
try:
os.remove(os.path.join(file_path,target.path))
except OSError:
pass
try:
os.remove(os.path.join(file_path,form.thumbgen_filename(target.path)))
except OSError:
pass
class ImageView(ModelView):
def _list_thumbnail(view,context,model,name):
if not model.path:
return ''
return Markup('<img src="%s">' % url_for('static',filename=form.thumbgen_filename(model.path)))
column_formatters = {
'path': _list_thumbnail
}
form_extra_fields = {
'path': form.ImageUploadField('Фотка',base_path=file_path,thumbnail_size=(100,100,True))
}
admin.add_view(ImageView(Image,db.session))
@app.route('/')
def index():
return '<a href="/admin/">Click me to get to Admin!</a>'
def create_db():
db.drop_all()
db.create_all()
if __name__ == '__main__':
app.run(debug=True)
但是,由于某些原因,由多个文件组成的第二个示例不起作用。它不保存图像。
app.py
from main import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True,port='4000')
main.py
from datetime import datetime
from flask_login import UserMixin
import os
from flask import Flask,form
from flask_admin.contrib.sqla import ModelView
file_path = op.join(os.getcwd(),'static')
db = SQLAlchemy()
admin = Admin(name='Website Admin',template_mode='bootstrap4')
def create_app():
app = Flask(__name__)
app.config['SECRET_KEY'] = os.environ['SECRET_KEY']
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///website.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
db.init_app(app)
admin.init_app(app)
return app
class Image(db.Model):
id = db.Column(db.Integer,target):
if target.path:
try:
os.remove(op.join(file_path,target.path))
except OSError:
pass
try:
os.remove(op.join(file_path,filename=form.thumbgen_filename(model.path))))
column_formatters = {
'path': _list_thumbnail
}
form_extra_fields = {
'path': form.ImageUploadField('Image',db.session))
名称已保存到数据库中,但图像未保存。我究竟做错了什么?如何修复第二个示例? 这些可能会有所帮助: File and Image Fields in Flask-admin
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。