gpt4 book ai didi

python - Flask-Admin 自动上传并插入数据库

转载 作者:太空狗 更新时间:2023-10-29 21:46:44 24 4
gpt4 key购买 nike

我的用户在 SQLAlchemy 中建模为:

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url_pic = Column(String(50), nullable=False)
(...)

我想将用户添加到 Flask-Admin 中的数据库,这样当我创建用户时,我可以直接上传照片,目标 url 被解析并传递给数据库中的 url_pic 字段。

我已经可以添加用户和上传照片(详见 https://flask-admin.readthedocs.org/en/latest/quickstart/ ),但找不到任何关于如何在同一 View 中合并添加用户和上传照片的信息。

有什么线索吗?

最佳答案

您可以将模型修改为如下所示:

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 的文档:link here我希望这可以帮助别人!

关于python - Flask-Admin 自动上传并插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19274555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com