1. 概述
路由其实就是URL和Python函数的映射关系,说的再明白点,就是客户端请求哪个路径交给哪个函数处理的问题。
通过给函数添加装饰器@app.route,即可定义路由,装饰器的参数即为对应的URL。
2. 简单路由
编写route.py,代码如下:
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'hello'
if __name__ == '__main__':
app.run(debug=True)
1
2
3
4
5
6
7
8
9
启动项目后,访问http://127.0.0.1:5000/hello,由于该访问地址URL匹配'/hello',所以将被hello()函数处理。
所以访问该页面结果如下:
3. 处理HTTP方法
默认情况下,路由只能响应GET方法,可以通过装饰器的methods参数设定路由能响应的方法。
例如我们想同时响应GET/POST方法,则代码如下:
@app.route('/hello', methods=['GET', 'POST'])
def hello():
return 'hello'
1
2
3
4. 绑定多个URL
一个函数可以绑定多个URL,只需要为该函数添加多个装饰器即可,如下函数可以处理三种URL请求。
@app.route('/')
@app.route('/home')
@app.route('/index')
def home():
return 'home page'
5. URL参数
有时候,我们希望接受URL上附带的参数,此时可以通过在装饰器上添加<xxx>格式的内容,来对应URL传递的参数。
例如:
@app.route('/user/<name>')
def userInfo(name):
return 'your name is %s' % name
此时我们通过http://127.0.0.1/user/chen访问,则chen匹配到了<name>,然后会自动传递给函数的参数name,所以网页运行如下:
6. 动态URL
除了直接使用装饰器匹配URL进行路由,还可以通过代码进行动态控制。
通过redirect()函数即可动态控制路由。
如下例子,如果我们访问/dynamic,则会自动跳转到userInfo函数去处理,且携带参数wang。
@app.route('/dynamic')
def dynamic():
return redirect(url_for('userInfo', name="wang"))
@app.route('/user/<name>')
def userInfo(name):
return 'your name is %s' % name
解释下,首先我们访问/dynamic,然后通过url_for解析出了跳转到userInfo且携带参数wang的地址为/user/wang,然后通过redirect函数自动重定向到/user/wang。
所以效果如下,注意地址栏已经自动重定向到/user/wang
7. 小结
Flask路由的功能还是比较灵活丰富的。