【问题标题】:flask session variable doesn't change after a request请求后烧瓶会话变量不会改变
【发布时间】:2016-02-09 14:44:04
【问题描述】:

我想在访问 url('/captcha') 时更新变量('CAPTCHA_NUM') 并在模板中获取此变量:

@app.route('/captcha')
def captcha():
    from captcha.image import ImageCaptcha
    from random import random
    image = ImageCaptcha()
    x = int(round(random() * 10000))
    if x < 1000: x += 1000
    session['CAPTCHA_NUM'] = x
    return image.generate(str(session['CAPTCHA_NUM']), 'png').getvalue()

但每次我刷新我的页面(访问此网址)时,验证码都会更新,但 session['CAPTCHA_NUM'] 不会。

例如,首先我得到验证码7530,然后我刷新register.html(访问url)和验证码更新但session['CAPTCHA_NUM']仍然是7530

这是我访问网址(验证码)的地方:

注册.html

<img id="vcode" src="{{url_for('captcha')}}" alt="captcha" />

我在validate_capcha() 中得到session['CAPTCHA_NUM']

<input type="text" name="captcha" onblur="validate_captcha()" />

=================解决方案=========================

flask session的官方文档中说:

This variable is unavailable if the template was rendered without an active request context.

我只是更改了img 标签的src 属性,显然这不是一个活动的请求上下文。

最后我将验证码验证部分放在服务器端,这样我就可以避免这个问题。

【问题讨论】:

  • 应该可以,尝试使用调试模式并检查错误消息?
  • @KevinGuan 我在控制台中打印 session['CAPTCHA_NUM'] 是正确的。但是在我的 register.html 页面中,变量不会改变,直到我重新访问应该更新为更新的 url:(
  • 所以这里没有错误,但是会话没有改变?
  • @KevinGuan 在captcha() 函数中,会话发生变化。但在register.html 中,它没有。
  • @KevinGuan 我想在服务器端检查它是唯一的选择。

标签: python session flask


【解决方案1】:

如果您使用访问 http://***.com/captcha 它不会刷新。 你需要给它一个参数,所以它会刷新

一开始你写

url_for('.captcha')

改成

url_for('.captcha',t=some_random_value)

然后它会刷新 因为它会生成一个这样的 url:http://***.com/captcha?t=some_random_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多