请求

时间:2015-11-09 00:55:32

标签: python session flask

我想在访问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(访问网址)并更新验证码,但session['CAPTCHA_NUM']仍为7530

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

register.html

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

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

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

=================解========================

flask session的官方文件中,它说:

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

我只是更改src标记的img属性,显然这不是有效的请求上下文。

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

1 个答案:

答案 0 :(得分:0)

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

首先你写

url_for('.captcha')

将其更改为

url_for('.captcha',t=some_random_value)

然后它会刷新 导致它生成这样的网址:http://***.com/captcha?t=some_random_value