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

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字段 我已经可

我的用户在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)
   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
可能会非常昂贵。