Flask 重定向用户和会话

        用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认。之所以出现这种情况,是因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。如果这个请求是一个包含表单数据的POST 请求,刷新页面后会再次提交表单。大多数情况下,这并不是理想的处理方式。很多用户都不理解浏览器发出的这个警告。 基于这个原因,最好别让Web 程序把 POST 请求作为浏览器发送的最后一个请求。
         这种需求的实现方式是, 使用重定向作为POST 请求的响应,而不是使用常规响应。重定向是一种特殊的响应, 响应内容是URL,而不是包含HTML 代码的字符串。浏览器收到这种响应时, 会向重定向的URL 发起 GET 请求,显示页面的内容。这个页面的加载可能要多花几微秒, 因为要先把第二个请求发给服务器。除此之外,用户不会察觉到有什么不同。现在,最后一个请求是GET 请求,所以刷新命令能像预期的那样正常使用了。这个技巧称为Post/ 重定向 /Get 模式。
         但这种方法会带来另一个问题。 程序处理POST 请求时,使用 form.name.data 获取用户输获取用户输入的名字
可是一旦这个请求结束,数据也就丢失了。因为这个 POST 请求使用重定向处理,所以程序需要保存输入的名字, 这样重定向后的请求才能获得并使用这个名字,从而构建真正的响应。
         程序可以把数据存储在用户会话中,在请求之间“ 记住”数据。用户会话是一种私有存储,存在于每个连接到服务器的客户端中。用户会话,它是请求上下文中的变量,名为session,像标准的Python 字典一样操作。

修改 hello.py: 重定向和用户会话

<span style="font-size:18px;">from flask import Flask, render_template, session, redirect, url_for
@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        session['name'] = form.name.data
        return redirect(url_for('index'))
    return render_template('
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值