重新捡起flask(六)
其实到这里来说,我发现狗书一些没太讲清楚的事情了,当然看着之前的笔记,其实我也知道自己以前也发现了一些问题。
由于我们大部分都是在用拓展包,其实拓展包为我们做了一些什么事情其实我是完全不知道的。
比如现在我们重点来看一下我们test函数。
@app.route("/test", methods=['GET', 'POST']) def test(): form = NameForm() if form.validate_on_submit(): session["name"] = form.name.data redirect(url_for("test")) return render_template("test.html", form=form, name=session.get("name"))
一个需要说到的点是,什么时候浏览器会发送post请求,什么时候会发送get请求,我们后台是否知道?
单纯从上面这段代码我们是不知道的。
我们只能猜测在jinja2模板里面的submit按钮会触发post请求,如果只是打开网址,会发送get请求。
我们是否能指定submit按钮,按下以后也发送get请求呢?我们现在不知道。
暂且就按上面的理解来继续吧。
然后,我们现在主要是解决一个刷新页面,浏览器会重复提交上一次请求的情况,当是post请求的话,浏览器会不厌其烦的告警。
浏览器是浏览器的事,我们只能靠我们的后台来做处理了。
那其实就像我们上面的所说的一样,我们应该是要处理上面那个东东,我要让按下submit的请求变成一个get请求,狗书中的redirect其实也是get请求啦。
狗书上是怎么做的,他直接改成上面的代码就实现了。
我一脸蒙蔽,不应该是改前端的代码么?
改后台这么骚的思路也可以做?
这里我真的不是特别理解。
但是,也要试图去理解一下。
我们没改前端,那么说明一个东东,按下submit按钮后,确实还是发了一个post请求过来(google浏览器开发者模式是不是可以验证这个说法?)。
后台收到这个post请求后,强制让客户端再发一个get请求过来。这样导致,按下按钮后,实际的最后效果,是最后发送了一个get请求。
这个思路确实骚。
不像我,傻乎乎的就像去改造前端按钮发送的请求。
再来看看上面这段代码,好像没起作用,坑吧,这么精辟的思路翻车了?
大家可以想想为什么没有生效?
因为什么呢?因为我漏了一个return。
其实完整的应该是这样的。
@app.route("/test", methods=['GET', 'POST']) def test(): form = NameForm() if form.validate_on_submit(): session["name"] = form.name.data return redirect(url_for("test")) return render_template("test.html", form=form, name=session.get("name"))
这样继续让我怀疑之前的一些假设。
假设我刚刚的假定是对的话,好像会有些问题。
我按下按钮触发post请求给后台,后台看到你这个东东,表格里面有东西,好,我就给你重定向一下。然后再返回给你test.html。
这样的话,其实最后请求也是get请求啊...
难道说前面想的是有问题的?
我们再来猜测吧,难道是这么说?
我们虽说写的是后台的代码,其实并不完全只是后台。其实也有一部分前端的逻辑?
不太清楚,望高人指点...
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号