先决条件 – HTTP 协议,使用Python 的GET 和 POST 请求
介绍:
PRG是 Web 开发中使用的众多设计模式之一。用于防止在提交表单后重新加载同一个网页导致表单的重新提交。它消除了内容冗余以加强搜索引擎优化并使网站用户友好。
它被大型、值得信赖的在线商店和其他旨在使用户友好的强大网站使用。
问题:
当我们尝试提交 Web 表单时,会向服务器发送 HTTP POST 请求。服务器处理请求并向客户端发送响应代码为 2XX 的响应。当客户端尝试刷新/重新加载网页时,他/她无意中向服务器发送了另一个 HTTP POST 请求,其中包含与之前相同的数据。这可能会导致不希望的结果,例如重复的网络购买。
浏览器重新加载后弹出警告信息框,如下图:
内部工作:
下面是上述问题的内部工作框图。
解决方案:
为了避免这个问题,许多 Web 开发人员使用POST/REDIRECT/GET模式,而不是直接返回一个网页, POST返回一个重定向到另一个网页或相同的网页,具体取决于需求。
内部工作:
下面是上述解决方案的内部工作框图。
使用 Flask 框架的最小Python和 HTML 代码来演示上述概念。
-
在项目根目录创建一个名为app.py的文件,并在其中写入以下代码。并使用 – 安装烧瓶
$pip install flask
from flask import Flask, render_template, redirect, request, url_for # Initiate flask app app = Flask(__name__) # Declare routes and methods @app.route('/', methods =['GET', 'POST']) def home(): # If it is POST request the redirect if request.method =='POST': return redirect(url_for('home')) return render_template('home.html', title ='Home') if __name__=='__main__': app.run()
在项目根目录下创建一个文件夹templates ,在templates目录下创建一个home.html文件,写入如下代码。
- 要在控制台中运行 Web 服务器类型:
$python app.py Output: Running on http://127.0.0.1:5000/
转到 Web 浏览器并输入localhost:5000并按回车键。
控制台输出:
在下图中,当我们使用 localhost:5000 时发出第一个 GET 请求,然后我们将数据 POST 到服务器。现在,在处理完数据后,服务器通过发出 GET 请求重定向我们,因此服务器发出第三个 GET 请求,最后在我们尝试刷新页面时发出第四个 GET 请求。注意:尝试在不重定向的情况下使用代码。