Python Flask Admin自动上传并插入数据库
我的用户在SQLAlchemy中建模为:Python Flask Admin自动上传并插入数据库,python,flask,flask-sqlalchemy,flask-admin,Python,Flask,Flask Sqlalchemy,Flask Admin,我的用户在SQLAlchemy中建模为: class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) url_pic = Column(String(50), nullable=False) (...) 我想将用户添加到Flask Admin中的数据库中,这样,当我创建用户时,我可以直接上传照片,解析目标url,并将其传递给数据库中的url_pic字段 我已经可
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url_pic = Column(String(50), nullable=False)
(...)
我想将用户添加到Flask Admin中的数据库中,这样,当我创建用户时,我可以直接上传照片,解析目标url,并将其传递给数据库中的url_pic字段
我已经可以添加用户和上传照片了(详细解释见),但是找不到关于如何在同一视图中合并添加用户和上传照片的任何信息
有什么线索吗?您可以修改模型,使其看起来像这样:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url_pic = Column(String(50), nullable=False)
pic = Column(LargeBinary, nullable=False)
...
现在,您应该从flask.ext.admin.contrib.sqla
中为ModelView
创建子类。然后将该子类的一个实例添加到Admin实例中。下面的源代码可以帮助您理解这一点
from flask.ext.admin.contrib.sqla import ModelView
from flask.ext.admin.form.upload import FileUploadField
from wtforms.validators import ValidationError
from flask.ext.admin import Admin
from flask.ext.sqlalchemy import SQLAlchemy
from flask import Flask
import imghdr
app = Flask(__name__)
db = SQLAlchemy(app)
class UserAdminView(ModelView):
def picture_validation(form, field):
if field.data:
filename = field.data.filename
if filename[-4:] != '.jpg':
raise ValidationError('file must be .jpg')
if imghdr.what(field.data) != 'jpeg':
raise ValidationError('file must be a valid jpeg image.')
field.data = field.data.stream.read()
return True
form_columns = ['id','url_pic', 'pic']
column_labels = dict(id='ID', url_pic="Picture's URL", pic='Picture')
def pic_formatter(view, context, model, name):
return 'NULL' if len(getattr(model, name)) == 0 else 'a picture'
column_formatters = dict(pic=pic_formatter)
form_overrides = dict(pic= FileUploadField)
form_args = dict(pic=dict(validators=[picture_validation]))
admin = Admin(app)
admin.add_view(UserAdminView(User, db.session, category='Database Administration'))
...
您可以在这里找到ModelView
的文档:
我希望这能帮助别人 如何添加用户和上传照片?您使用的是两种不同的视图吗?你能分享一些代码吗?我的管理面板的视图如下:。正如您所想象的,它将为内容和文件上传呈现一个单独的视图(我想合并它,这样当我添加内容时,url将与上传的文件相同)Thnks<
User
类中的code>pic应该是一个带有路径名的字符串,否则如果这成为一个大型项目,在数据库中存储大量的LargeBinary
可能会非常昂贵。