Flask中GET请求触发机制咨询:初始访问/login路由时GET请求如何生成?
解答:初始访问Flask路由时GET请求的生成逻辑
先把你提供的相关代码整理出来:
HTML页面代码(name.html)
<!DOCTYPE html> <html> <body> <h3>Enter Your Name</h3> <form method="post"> <input type="text" name="username" required> <br><br> <input type="submit" value="Submit"> </form> </body> </html>
Flask后端代码
from flask import Flask, request, render_template app = Flask(__name__) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': name = request.form['username'] return f"Hello {name}, POST request received" return render_template('name.html') if __name__ == '__main__': app.run(debug=True)
疑问解答:初始访问时的GET请求是怎么来的?
其实这是HTTP协议的默认行为,和你表单里设置的POST方法完全是两回事:
- 当你在浏览器地址栏直接输入
http://localhost:5000/login、或者通过普通链接(比如<a href="/login">)跳转到这个路由时,浏览器会自动向服务器发送一个GET请求——这是浏览器获取网页内容的默认请求方式,目的就是请求服务器返回对应的页面资源。 - 你在HTML表单里设置的
method="post",只是指定了点击表单的提交按钮时,浏览器会发送POST请求把表单数据传给服务器,这是触发特定操作的请求,和初始加载页面的GET请求互不干扰。
再结合你的Flask代码看:路由@app.route('/login', methods=['GET', 'POST'])明确声明了同时支持GET和POST两种请求方法,所以当浏览器发送初始的GET请求过来时,代码会进入request.method != 'POST'的分支,执行render_template('name.html')渲染出表单页面,这就是你看到初始页面的整个流程啦。
内容的提问来源于stack exchange,提问作者Ronaka Samaraweera
相关产品推荐
相关产品推荐

