在 Flask 应用中同时渲染多个上传图片而不替换旧图片

在 flask 应用中同时渲染多个上传图片而不替换旧图片

本文档旨在解决 Flask 应用中上传多个图片时,新图片替换旧图片的问题。通过结合 Flask 的 session 功能,我们将展示如何修改 Python 代码和 HTML模板,实现同时显示多个用户上传的图片,从而构建更完善的图像编辑应用。

问题分析

在原代码中,上传图片后,文件名存储在全局变量中,并在 HTML 模板中使用该变量来显示图片。每次上传新图片,全局变量都会被更新,导致页面上只显示最后上传的图片。

解决方案:使用 Flask Session

Flask Session 允许我们在服务器端存储用户特定的数据,并在后续的请求中访问这些数据。 我们可以使用 Session 来存储每个上传图片的文件名,并在 HTML 模板中分别显示它们。

代码实现

1. 修改 Python 代码 (app.py)

首先,确保你的 Flask 应用已经安装了 Flask-Session。如果没有,可以使用 pip install Flask-Session 安装。

然后,修改你的 Flask 应用代码,如下所示:

from flask import Flask, render_template, request, redirect, url_for, flash, sessionfrom werkzeug.utils import secure_filenameimport osimport cv2app = Flask(__name__)app.secret_key = "your_secret_key" # 强烈建议修改为你自己的密钥app.config['UPLOAD_FOLDER'] = 'static/uploads'app.config['SESSION_TYPE'] = 'filesystem'  # 使用文件系统存储session#from flask_session import Session #如果使用这种方式,需要去掉下面的注释,并把app.config注释掉#Session(app) #如果使用这种方式,需要去掉上面的注释,并把app.config注释掉ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}def allowed_file(filename):    return '.' in filename and            filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS@app.route('/')def home():    return render_template('index.html')@app.route('/', methods=['POST'])def upload_content():    if not any(f in ['content_file', 'style_file'] for f in request.files):        flash('No file part')        return redirect(request.url)    submitted_file = 'content_file' if 'content_file' in request.files else 'style_file'    file = request.files[submitted_file]    if file.filename == '':        flash('No image selected for uploading')        return redirect(request.url)    if file and allowed_file(file.filename):        filename = secure_filename(file.filename)        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))        session[submitted_file] = filename        print('upload_image filename: ' + filename, os.path.join(app.config['UPLOAD_FOLDER'], filename))        flash('Image successfully uploaded and displayed below')        return render_template('index.html')    else:        flash('Allowed image types are - png, jpg, jpeg, gif')        return redirect(request.url)@app.route('/display/')def display_image(filename):    return redirect(url_for('static', filename='uploads/' + filename), code=301)if __name__ == '__main__':    app.run(debug=True)

代码解释:

Melodio Melodio

Melodio是全球首款个性化AI流媒体音乐平台,能够根据用户场景或心情生成定制化音乐。

Melodio 110 查看详情 Melodio app.secret_key: 设置 Flask 应用的密钥。 务必替换为你自己的安全密钥。app.config[‘SESSION_TYPE’] = ‘filesystem’: 配置 Session 的存储类型为文件系统。你也可以选择其他存储类型,如 Redis 或数据库。session[submitted_file] = filename: 将上传的文件名存储到 Session 中。 submitted_file 变量用于区分是内容图片还是样式图片。if not any(f in [‘content_file’, ‘style_file’] for f in request.files):: 检查是否上传了任何文件。submitted_file = ‘content_file’ if ‘content_file’ in request.files else ‘style_file’: 确定是哪个文件上传表单提交了文件。

2. 修改 HTML 模板 (index.html)

修改 HTML 模板,从 Session 中获取文件名并显示图片:

    Image Upload    

Select a content image to upload

{% with messages = get_flashed_messages() %} {% if messages %}

    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

{% if session['content_file'] %} 在 Flask 应用中同时渲染多个上传图片而不替换旧图片 {% endif %}

Select a style image to upload

{% with messages = get_flashed_messages() %} {% if messages %}

    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

{% if session['style_file'] %} 在 Flask 应用中同时渲染多个上传图片而不替换旧图片 {% endif %}

代码解释:

name=”content_file”name=”style_file”: 修改了上传表单中文件输入框的 name 属性,以便在 Python 代码中区分上传的文件类型。{% if session[‘content_file’] %}{% if session[‘style_file’] %}: 只有当 Session 中存在相应的文件名时,才显示图片。url_for(‘display_image’, filename=session[‘content_file’])url_for(‘display_image’, filename=session[‘style_file’]): 从 Session 中获取文件名,并生成正确的图片 URL。

总结

通过使用 Flask Session,我们可以轻松地在多个请求之间存储和访问数据,从而实现更复杂的功能,例如同时显示多个上传图片。 这种方法避免了使用全局变量,使代码更清晰、更易于维护。

注意事项

安全性: 务必设置一个安全的 secret_key,以保护 Session 数据的安全。Session 存储: 选择合适的 Session 存储类型,根据你的应用需求和服务器环境进行选择。文件系统存储适用于开发和小型应用,对于大型应用,建议使用 Redis 或数据库等更可靠的存储方式。错误处理: 添加更完善的错误处理机制,例如处理 Session 中不存在文件名的错误。文件大小限制: 根据实际需求,限制上传文件的大小,以防止服务器资源被滥用。

通过以上步骤,你就可以在 Flask 应用中同时渲染多个上传图片,而不会替换之前的图片。

以上就是在 Flask 应用中同时渲染多个上传图片而不替换旧图片的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/938937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 17:02:05
下一篇 2025年11月29日 17:07:45

相关推荐

  • 币安交易所app入口官网2025

    币安注册流程为:1、打开币安App点击【注册】;2、选择邮箱、手机号或Apple/谷歌账户注册;3、注意账户类型不可更改;4、输入信息并设置至少8个字符含大写字母和数字的密码;5、在30分钟内输入邮箱或手机收到的6位验证码完成验证;6、注册成功后进行身份认证(KYC);7、中国大陆用户选择“中国”并…

    2025年12月10日 好文分享
    000
  • 2025山寨币还会起飞吗?哪些山寨币潜力还没被发掘出来

    是的,2025年山寨币将迎来分化式起飞,少数优质项目有望百倍增长,但90%可能归零;1. AI+区块链(TAO、AKT、RNDR)、2. 模块化区块链(TIA、DYM)、3. RWA(ONDO、CFG)、4. 高性能公链与Meme基础设施(SUI、MemeCore)为四大潜力赛道;顶级分析师押注TA…

    2025年12月10日
    000
  • 一万本金如何在币圈一年赚千万?高胜率交易策略公开!

    用一万本金在风高浪急的币圈市场实现千万收益,这并非天方夜谭,它是一条险峻的、专属于极少数人的路径。这条路摒弃了传统金融的稳健与保守,转而拥抱极致的波动性与周期性。它需要的不是运气,而是一套严密、冷酷且可复制的交易系统。这个系统融合了对市场情绪的精准洞察、对项目基本面的深度挖掘以及钢铁般的执行纪律。想…

    2025年12月10日
    000
  • 币圈低本金如何高效复利?这七个方法让你稳赚不赔!

    在数字货币领域,本金的规模并非成功的唯一决定因素。对于低本金的参与者,掌握高效的复利策略,利用时间和策略的力量,同样可以实现资产的稳健增值。关键在于采用正确的思维方式和执行严谨的操作纪律。以下将介绍七个核心方法,帮助低本金用户在币圈中稳步前行。 精准选择,奠定基础 1、深入研究项目基本面。投资决策不…

    2025年12月10日
    000
  • 币圈小资金如何逆天改命?从一万到千万的终极指南!

    在数字货币这个充满机遇与风险的战场上,每一笔小资金都怀揣着一个惊天动地的梦想。从一万到千万,这并非天方夜谭,而是一条需要极致认知、非凡胆识与严苛纪律铺就的荆棘之路。这不单单是资本的游戏,更是一场对人性、对信息、对时机的深度博弈。想要实现这个目标,就需要一套完全不同于常规的打法和心法。 重塑认知:小资…

    2025年12月10日
    000
  • 币圈一万本金如何滚成百万?这五个步骤缺一不可!

    在数字货币的浪潮中,将一万本金变为百万,听起来像是天方夜谭,但对于掌握了正确方法论的参与者而言,这并非一个完全不可能实现的路径。这个过程充满了风险与挑战,它需要的不是一夜暴富的幻想,而是一套严谨、系统化的操作策略。这趟旅程的每一步都环环相扣,构成了从量变到质变的核心驱动力。以下五个步骤,描绘了这样一…

    2025年12月10日
    000
  • 如何在币圈用两千本金赚百万?短线狙击战法全解!

    在数字货币的浪潮中,用有限的本金实现财富的巨大增值,是许多参与者的梦想。两千本金,目标百万,这并非遥不可及的神话,它需要的是一套极致的交易纪律、敏锐的市场嗅觉和冷酷的执行力。这套方法论的核心并非长期价值投资,而是一场场高强度、快节奏的短线狙击战。 它要求交易者化身为潜伏在暗处的狙击手,放弃漫无目的的…

    2025年12月10日
    000
  • 币圈小资金如何实现百倍收益?这四大策略必须学!

    在数字货币的浪潮中,许多投资者怀揣着以小博大的梦想。小资金账户想要实现资产的跳跃式增長,并非仅凭运气。它需要一套行之有效的策略、严谨的执行纪律以及对市场深刻的理解。对于本金有限的参与者,精细化的操作和差异化的打法是通往高倍收益的必经之路。下面将详细阐述几种适用于小资金的实战策略。 一、挖掘早期潜力项…

    2025年12月10日
    000
  • 如何在币圈用三千本金赚千万?实战经验全分享!

    在数字货币这个充满机会与风险的竞技场中,用三千本金撬动千万财富的故事,听起来像是天方夜谭,但它确实在某些角落真实上演。这并非一条寻常路,它需要极致的认知、超凡的耐心、铁打的纪律以及不可或缺的运气。这里分享的不是投资建议,而是一段段在刀尖上行走的实战经验,记录了从微小本金开始,如何通过一系列操作,逐步…

    2025年12月10日
    000
  • 币圈低本金如何抓住下一个百倍币?内行人的选币逻辑!

    在数字资产的浪潮中,许多本金有限的参与者都怀揣着发现并抓住下一个“百倍币”的梦想。这并非纯粹的运气游戏,其背后隐藏着一套严谨且深刻的内在逻辑。想要在成千上万的项目中筛选出具备巨大潜力的目标,需要一套行之有效的分析框架。 这套框架并非保证成功的魔法,而是一种提升发现概率的科学方法,一种内行人普遍遵循的…

    2025年12月10日
    000
  • 2025年比特币十大交易所推荐 比特币好用安全的交易所汇总

    随着数字资产市场日益成熟,选择一个安全、可靠且功能强大的比特币交易所是每位投资者成功的关键。本文为您精心筛选并汇总了2025年最值得推荐的十大比特币交易所,综合考量了平台的安全性、交易深度、用户体验及创新功能,旨在帮助您找到最适合自己需求的交易平台。 2025年比特币十大交易所推荐榜单 1. 币安 …

    2025年12月10日
    000
  • 稳定币是什么?2025年值得持有的十大稳定币推荐

    %ignore_a_1%作为数字资产市场中的重要组成部分,因其价格相对稳定,广泛应用于交易对冲、跨境支付和资产管理。本文将介绍稳定币的基本概念,解析其类型,并推荐2025年值得关注和持有的十大稳定币,帮助用户合理配置资产。 2025年十大稳定币推荐 结合市场规模、透明度和合规性,以下稳定币备受关注:…

    2025年12月10日
    000
  • 2025年8月加密货币交易所排名:交易量、流动性排名前十的交易所是哪些

    随着2025年下半年加密货币市场的持续演进,选择一个兼具高交易量与深度流动性的交易所至关重要。本文为您梳理了当前全球排名前十的加密货币交易所,旨在帮助投资者在复杂的市场环境中,找到最适合自己交易需求的平台。 2025年8月顶级加密货币交易所排名 1. 币安 (Binance)  官网直达:  作为全…

    2025年12月10日
    000
  • Ripple 斥资 2 亿美元收购稳定币平台 Rail

    ripple(瑞波)近期宣布斥资2 亿美元,正式收购稳定币基础设施平台 rail,这一动作标志着该公司在稳定币领域的战略布局进入实质阶段。本文将简要梳理此项收购事件的背景、目标及可能对行业带来的影响。 收购背景:稳定币赛道成为主战场 2025 年以来,稳定币作为链上支付和跨境结算的重要工具,正受到越…

    2025年12月10日
    000
  • 区块链共识机制,怎样塑造数字货币生态

    区块链共识机制是分布式网络中确保交易一致性和有效性的规则系统,它通过解决双重支付和拜占庭将军问题,保障了数字货币的去中心化、安全性和透明性;2. 主流共识机制包括工作量证明(PoW)、权益证明(PoS)和委托权益证明(DPoS),其中PoW依赖算力竞争,安全性高但能耗大,PoS通过质押代币选择验证者…

    2025年12月10日
    000
  • 数字货币种类繁多,区块链是核心纽带

    数字货币的核心是区块链技术,它通过去中心化、不可篡改、透明可追溯等特性成为数字货币的基石。1. 比特币(BTC)是数字黄金,用于价值存储;2. 以太坊(ETH)支持智能合约和DApps;3. 稳定币如USDT锚定法币,减少波动;4. 山寨币在技术或场景上创新;5. DeFi代币赋予治理权;6. NF…

    2025年12月10日
    000
  • 区块链与虚拟货币的共生关系

    区块链与虚拟货币相互依存,共同构建了去中心化的数字金融生态;1. 区块链通过去中心化、不可篡改、透明性、安全性和分布式存储为虚拟货币提供技术基石;2. 虚拟货币作为区块链的核心应用场景,涵盖比特币、以太坊、DeFi、NFT和价值传输;3. 共生关系面临监管不确定性、技术扩展性、能耗问题、安全漏洞、市…

    2025年12月10日
    000
  • 数字货币、虚拟货币与区块链,你分清了吗

    数字货币、虚拟货币与区块链的关系是:区块链是底层技术,数字货币(特指加密货币)是其应用,而虚拟货币是包含前两者的更广泛概念;1. 区块链作为去中心化、不可篡改的分布式账本技术,为数字货币提供信任机制;2. 数字货币分为中心化(如银行电子余额)和去中心化(如比特币)两类,后者基于区块链运行;3. 虚拟…

    2025年12月10日 好文分享
    000
  • 从区块链基础,看虚拟货币交易底层逻辑

    区块链是虚拟货币交易的底层技术,其去中心化、不可篡改、透明性和安全性特性为交易提供了可靠保障;虚拟货币交易通过区块链记录所有权、广播验证、打包进区块并确认,而交易所作为中心化中介提升便利性但带来风险;面对交易拥堵,可选择低费用网络、调整矿工费或使用Layer 2方案;私钥丢失或泄露风险需通过离线保存…

    2025年12月10日 好文分享
    000
  • Binance交易所app网页版登录入口2025

    币安新用户注册需先下载App或访问官网,1、打开币安App点击【注册】;2、选择邮箱、手机号或Apple/谷歌账户注册;3、谨慎选择账户类型;4、输入信息并设置至少8位含大写字母和数字的密码;5、在30分钟内输入邮箱或手机收到的6位验证码完成验证;6、注册后需进行身份认证(KYC),中国大陆用户选“…

    2025年12月10日 好文分享
    000

发表回复

登录后才能评论
关注微信