Flask 重定向后自动刷新页面

给自己的网站想做一个更换头像的功能,目前主体思路是这样的
1:上传的图片,放在static文件夹内,以用户名来建文件夹,并以用户名来保存图片
比如,用户名是mike,那我以/static/flask_upload/mike/mike.jpg 为形式,保存图片
当然,图片后缀名我在views里面会进行提取,以便最后保存时候用
每次用户重新上传头像时候,先整个删除mike文件夹,包括里面的图片
再重新保存

2:而上面这个URL,我存放在用户的数据库模型内,可以在渲染页面调用

目前碰到一个问题,用户上传图片以后,图片在文件系统内是更新了
但是页面上不更新,哪怕你重新登录账号也没用
只有你手动刷新页面才会把头像更新掉

感觉是页面上的头像URL还是指向旧的图片,不知道里面的原理是什么
请有经验的筒子指教一下,谢谢。

问题1:现在不知道是否是靠flask和数据库能实现?还是需要借助javascript的方法来操作?

问题2:是否可以在重定向的同时,或者之后,来进行页面的刷新,以保证用户在重定向之后可以马上看到更新后的头像?

路由函数是这样的

@main.route('/upload_file/<username>',methods=['GET','POST'])

def upload_file(username):

form = UploadForm()

user = User.query.filter_by(username = username).first()

if form.validate_on_submit():

ext=form.upload.data.filename.split('.')[-1]

filename = '\\'+username+'\\'+username+'.'+ext

if ext:

shutil.rmtree(current_app.config['UPLOADED_TEST_DEST']+'\\'+username)

icon.save(form.upload.data , folder = current_app.config['UPLOADED_TEST_DEST']+'\\'+username+'\\', name = username+'.'+ext)

url=current_app.config['UPLOADED_FILES_URL']+'\\'+username+'\\'+username+'.'+ext

user.update_avatar(url)

return redirect(url_for('.user',username = username, user = user))

return render_template('upload_file.html',form=form)

user页面的渲染代码是这样的,其中user.avatar就是用户在数据库里面所保存的图片URL位置

{% if user.avatar %}

<img class="img-rounded profile-thumbnail" src= "{{user.avatar}}" width = "256" height ="256">

{% else %}

<img class="img-rounded profile-thumbnail" src= "{{user.gravatar(size=256)}}">

{% endif %}

图片描述

这里可以看到,文件系统内的图片已经更新了,但是我重定向到user页面之后,头像还是没变

图片描述

回答:

哈哈,这个问题我也遇到过,因为不是很熟悉前端和HTTP缓存的一些知识,所以折腾了好久。做法就是:

Is there a way to force browsers to refresh/download images?

我还记在 https://github.com/xuelangZF/... 这个 issue 里面。在这个小的练手项目可以看到具体代码的。

以上是 Flask 重定向后自动刷新页面 的全部内容, 来源链接: utcz.com/a/163534.html

回到顶部