Flask干货:Flask视图高级技术(一)
众所周知,上网是需要网址的,比如百度(www.baidu.com)、知乎(www.zhihu.com)。
通过前面的学习,我们的电脑也能变成一个服务器,而且网址为http:// http://127.0.0.1:5000/。现在假设我们要新建一个网站,而且网页有很多个,那我们要如何管理、存放并给网页指定网址呢?
哈,当然有办法,而且我们之前已经用过了,app.route。
在Flask应用中,路由是指用户请求的URL与视图函数之间的映射,处理URL和函数之间关系的程序称为路由。
Flask框架根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数,并将视图函数的执行结果返回给路由器。
app.route的使用
在Flask框架中,默认是使用@app.route装饰器(前面已经用过了)将视图函数和URL绑定的。
上述代码中,有两个视图函数index()和product(),使用app.route装饰器能将URL和执行的视图函数关系保存到app.url_map属性上。
对于视图函数index(),代码将URL ’/’与其绑定,所以在使用时输入http:// http://127.0.0.1:5000/就能显示其内容,也就是主页面;
product()的绑定同理,输入http:// http://127.0.0.1:5000/product就能显示其内容,相当于是子页面。
add_url_rule的使用
除了使用@app.route装饰器,我们还可以使用add_url_rule来绑定视图函数和URL,先看下面的代码:
from flask import Flask,url_for
app = Flask(__name__)
def index():
return "Hello World!"
def my_test():
return "这是一个测试页!"
app.add_url_rule('/test/', endpoint='my_test', view_func=my_test)
if __name__ == "__main__":
app.run(debug=True)
网页中显示:
代码中使用add_url_rule()函数将视图函数和URL绑定,即把路由“/test/”和视图函数my_test()进行绑定。
在add_url_rule()函数中,涉及三个参数:
rule:设置的URL。
endpoint:给URL设置的名称。
view_func:指定视图函数的名称。
因此,我们稍做改动:
def my_test():
return "这是一个测试页!"
app.add_url_rule('/test/', endpoint='test', view_func=my_test)
代码中endpoint只是指定了此URL的名称,view_func里面指定视图函数的名称。
如果已经指定了endpoint,url_for指定的时候就不能用视图函数的名称了,而是用endpoint的名称;也就是说如果想用url_for反转,只能用url_for(endpoint)。
这里看起来比较复杂,用下面的例子看一下就会比较清楚:
from flask import Flask,url_for
app = Flask(__name__)
def index():
return "Hello World!"
def my_test():
return "这是一个测试页!"
app.add_url_rule('/test/', endpoint='test', view_func=my_test)
with app.test_request_context(): #构建一个虚拟的请求上下文环境
print(url_for('test'))
if __name__ == "__main__":
app.run(debug=True)
可以看到,“/test/”被打印在命令行中: