You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中不使用JS获取不同随机图片?解决重复问题

解决Flask随机图片接口重复加载同一张的问题

这个问题我之前也碰到过!核心原因就是浏览器的缓存机制:当多个<img>标签用同一个/rnd URL时,浏览器会偷懒只发一次请求,之后所有相同URL的请求直接复用缓存结果,所以才会出现所有图片都一样的情况。既然不想改前端JS,咱们从后端动手就能解决,下面给你两个可行方案:

方案1:强制浏览器不缓存/rnd的响应

这是最直接的办法,只需要修改views.py里的接口函数,给响应加上缓存控制头,告诉浏览器"别存这个请求的结果,每次都重新问我要":

@app.route("/rnd", methods=["GET"])
def get_random_img():
    image = random.choice(images)
    full_path = "static/img/b/" + image
    # 先获取send_file返回的响应对象
    response = send_file(full_path)
    # 添加缓存禁止的响应头
    response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "0"
    return response

加上这几个头之后,浏览器每次加载<img src="/rnd">时,都会老老实实给服务器发新请求,后端每次返回不同的随机图,问题就解决了。

方案2:理解robohash的思路(拓展参考)

你提到的robohash,它的核心思路是让每个请求的URL唯一——比如不同的路径片段、查询参数,浏览器会把这些当成不同的资源,自然不会复用缓存。但你不想改前端JS的话,没法给每个<img>自动加不同参数,所以这个思路没法直接套用。不过如果之后允许改前端的话,可以给/rnd加个随机参数(比如/rnd?t=xxx,后端忽略这个参数就行),也能达到同样的效果。

但回到你的需求,方案1完全不需要动前端代码,改完后端就能生效,是最优解。

内容的提问来源于stack exchange,提问作者tbzk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:56:45