[英]Flask-Admin upload and insert in database automatically
我的用戶在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/上解釋),但無法找到有關如何合並添加用戶和照片上傳的任何信息相同的觀點。
任何線索?
您可以將模型修改為如下所示:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url_pic = Column(String(50), nullable=False)
pic = Column(LargeBinary, nullable=False)
...
現在,你應該繼承ModelView
從flask.ext.admin.contrib.sqla
。 然后,將該子類的實例添加到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
的文檔: 鏈接在這里我希望這可以幫助某人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.