【问题标题】:How to upload an image with flask-admin and flask-sqlachelmy?如何使用 flask-admin 和 flask-sqlachelmy 上传图片?
【发布时间】:2020-11-11 23:31:18
【问题描述】:

我正在创建一个简单的博客,我使用 flask-admin 来生成文章。每篇文章都基于下面给出的模型管理员。我不知道如何定义变量cover,以便在我的管理面板中找到上传图片的输入。

# importing some modules ...
from flask_admin import Admin
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)
admin = Admin(app, template_mode='bootstrap3')

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), nullable=False)
    description = db.Column(db.String(255), nullable=False)
    slug = db.Column(db.String(255))
    content = db.Column(db.Text, nullable=False)
    cover = # which type here ?
    author = db.Column(db.String(255), nullable=False)
    created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())
    edited_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())

class AdminArticleView(ModelView):

    # some specific code here

    def on_model_change(self, form, model, is_created):
        if isinstance(model, Article):
            # some code ...
            # may be work here to enable uploading an image in flask-admin ?

admin = Admin(app, template_mode='bootstrap3')
admin.add_view(AdminArticleView(Article, db.session)) 

我假设我将不得不更改视图 AdminArticleView,但我在烧瓶中真的很新……我的想法是在封面中注册图像的路径,所以我将使用 db.Column(db.Column) 来定义它。字符串,可为空=真)。然后,我会上传文件并将其路径存储在封面中(我也不知道该怎么做..)。但是,我发现这个想法有一个问题:将属性覆盖定义为 db.String 会导致在前端添加文本输入,因此无法在那里上传图像。我们需要在那里输入文件。我认为还有另一种更烧瓶pythonic的方法来解决这个问题。有人有想法可以帮助我吗?任何答案将不胜感激!

【问题讨论】:

    标签: python flask file-upload


    【解决方案1】:

    你走在正确的道路上。有点……

    它将是一个 db.String 列,它将存储图像文件的路径。 当您想在页面上显示图像时,它将使用url_for()url() 并使用<img> 标记。

    它看起来像这样 ::

    在路线中:

    image_file = url_for('static', filename='coverpics/'+current_user.cover)
    return render_template(#your other args..., cover_url=image_file)
    

    这里,current_user 是自动获取当前登录的用户,然后进行与该用户相关的任何数据库查询。

    在模板中: <img href="{{cover_url}}">

    但是由于您是绝对的初学者,我假设您甚至不知道如何保存上传的封面图片。因此,您需要做大量工作才能在应用程序中实现此功能。

    我建议您观看本教程:

    https://www.youtube.com/watch?v=803Ei2Sq-Zs

    这是关于如何在您的烧瓶 web 应用中实现个人资料图片,但我相信您可以从中学习并实现封面图片。事实上,观看整个系列。你不会后悔的。

    欢迎询问更多!

    【讨论】:

    • 谢谢@wiserdivisor 我现在会看它并尝试在我身边做点什么。一旦我的代码工作,我将刷新这篇文章。希望很快能见到你的 cmets :)
    • 如果您觉得此答案令人满意,请务必将其标记为最佳答案!
    • 明天我会的。我几乎解决了我的问题,我将在这里分享解决方案:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2018-06-13
    • 2020-12-19
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多