Flask 重定向和HTTP方法 GET、POST
Flask URL构建
Redirect重定向
url_for() 函数对于动态构建特定函数的URL非常有用。
url_for() 函数接受 函数的名称 作为 第一个参数 ,以及一个或 多个关键字参数 ,每个参数对应于URL的变量部分。
以下脚本演示了如何使用 url_for() 函数:
from flask import Flask, redirect, url_for
app = Flask(__name__)
# 重定向admin
@app.route('/admin')
def hello_admin():
return 'Hello Admin'
# 重定向guest
@app.route('/guest/<guest>')
def hello_guest(guest):
return 'Hello %s as Guest' % guest
# 程序主入口
@app.route('/user/<name>')
def hello_user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest', guest = name))
if __name__ == '__main__':
app.run(debug=True)
这里注意url_for的第一个参数是函数名而不是路由名称
效果截图
访问
http://localhost:5000/user/admin
控制台输出
访问
http://localhost:5000/user/user1
控制台输出
Flask HTTP方法
Http协议是万维网中数据通信的基础。在该协议中定义了从指定URL检索数据的不同方法。
下表总结了不同的http方法:
序号 | 方法与描述 |
---|---|
1 | GET:以未加密的形式将数据发送到服务器,是最常见的方法。 |
2 | HEAD:和GET方法相同但是没有响应体。 |
3 | POST:用于将HTML表单数据发送到服务器,POST方法接受的数据不由服务器缓存。 |
4 | PUT:用于上传内容替换目标资源的所有当前表示。 |
5 | DELETE:删除由URL给出的目标支援的所有当前表示。 |
常用的方法主要是 GET 和 POST
默认情况下,Flask路由响应 GET 请求。但是,可以通过为 route() 装饰器提供方法参数来更改此首选项。
为了演示在URL路由中使用 POST 方法,首先让我们创建一个HTML表单,并使用 POST 方法将表单数据发送到URL。
将以下脚本另存为login.html( 注意新建文件夹templates并将HTML文件放在对应文件夹下 )
<html>
<form action = "http://localhost:5000/login" method = "post">
<p>请输入名称:</p>
<p><input type = "text" name = "name" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
编写Flask-Code
from flask import Flask, redirect, url_for, request, render_template
app = Flask(__name__)
# 路由到Login模板HTML
@app.route('/')
def index():
return render_template("login.html")
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
print(1)
user = request.form['name']
return redirect(url_for('success',name = user))
else:
print(2)
user = request.args.get('name')
return redirect(url_for('success',name = user))