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>
<body>
<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))
if __name__ == '__main__':
app.run(debug=True)
效果截图
使用POST请求,进行表单提交
请求响应
控制台输出信息
修改HTMLPOST为GET,再进行上述操作
可以发现使用Get请求一样可以得到对应的结果,不过我们一般在表单提交都会使用POST请求,因为表单请求会涉及到文件上传,而POST请求对文件上传的大小没有限制,而GET请求对提交请求的文件大小会存在限制。
注意两种方式取值的方式
# POST
user = request.form['name']
# GET
user = request.args.get('name')
如果你希望访问源码:Flask-code gitee