【发布时间】: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 我想在服务器端检查它是唯一的选择。