在Flask程序中,浏览器通过URL发送HTTP请求给Web服务器,Web服务器再将HTTP请求转发给Flask程序。
Flask程序接收到HTTP请求后,需要知道Flask程序中哪部分代码对这个请求进行处理。为此,Flask程序保存了一个URL与视图函数或类的映射关系,建立映射关系的过程称为注册路由。
路由注册完成后,当浏览器根据URL访问网站时会执行Flask程序中与该URL关联的视图函数或类。
在Flask中,注册路由一般分为两种方式,一种方式是通过route()方法进行注册,另一种方式是通过add_url_rule()方法进行注册。
1、 通过route()方法注册路由
route()是Flask类提供的方法,该方法用于将视图函数与特定的URL建立关联,当通过浏览器访问URL时程序内部自动调用与之关联的视图函数。
route(rule, methods, **options)
rule:必选参数,表示URL规则字符串,该字符串必须以“/”开始。
methods:可选参数,表示HTTP请求方法。
**options:可选参数,表示传递给底层werkzeug.routing.Rule对象的额外选项。
若URL规则字符串以“/”结尾,但用户访问URL时并没有在URL末尾附加“/”,则会自动重定向到附加了“/”的页面;若URL规则字符串的末尾没有附加“/”,但用户通过URL访问页面时在URL末尾附加了“/”,则会出现404页面。
route()方法的用法比较特殊,需要以装饰器的形式写在视图函数的上方。 下面通过一个示例演示如何通过route()方法注册路由,使视图函数与URL建立关联。
from flask import Flask
app = Flask(__name__)
@app.route('/index') # 通过route()方法注册路由,URL规则为/index
def index():
return f'<h1>这是首页!</h1>'
if __name__ == '__main__':
app.run()
2、通过add_url_rule ()方法注册路由
add_url_rule()也是Flask类提供的方法,该方法一般需要传递URL和URL关联的函数名。
add_url_rule(rule, endpoint=None, view_func=None,provide_automatic_options=None, **options)
rule:必选参数,
表示URL规则字符串。
endpoint:可选参数,表示端点名称。
view_func:可选参数,表示与端点关联的视图函数名。
methods:可选参数,表示定义的HTTP请求方法。
**options:可选参数,表示传递给底层werkzeug.routing.Rule对象的额外选项。
通过add_url_rule ()方法注册路由
from flask import Flask
app = Flask(__name__)
def index_new():
return f'<h1>这是首页!</h1>'
# 通过add_url_rule()方法注册路由
app.add_url_rule(rule='/index', view_func=index_new)
if __name__ == '__main__':
app.run()
分析route()方法的源码可知,route()方法内部其实调用了add_url_rule()方法,我们可以把route()当作add_url_rule()方法的快捷方法,route()方法的用法更简洁,无需传入与URL规则关联的视图函数名。