Flask注册路由(二)
在第一节中,启动Flask的程序后,在浏览器中访问http:localhost//5000/就会显示Hello World,
也就是说,在WEB的应用程序里,客户端和服务器上的Flask程序交互简单的来说可以总结为:
1、用户在浏览器输入请求地址
2、Flask程序接收用户请求的地址并且对请求的地址进行解析
3、依据请求的地址URL找到对应的视图函数,视图函数进行处理
4、视图函数接收到处理请求后,生成响应,返回给客户端,也就是浏览器
5、浏览器接收到响应后对信息进行解析,将信息展示显示在页面中
在Flask的应用程序中,是需要在视图函数前加app.route()装饰器,并传入URL规则作为参数,这样URL
就与视图函数之间建立起了关联。编写视图函数Hello,它的源码为:
from flask import Flask app = Flask(__name__) app.config.from_pyfile('config.py',silent=True) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/index') def index(): return 'Hello 无涯' if __name__ == '__main__': app.run()
在如上的视图函数中,app.route('/index')装饰器是把地址/index与index()视图函数绑定起来,当用户
访问这个URL的时候就会触发index()的函数。执行视图函数后,视图函数返回的值将作为响应的主体,
也就是说把返回的响应的主体展示在浏览器窗口的HTML的页面。
在实际的工作中,视图函数的路由不会如上面的那么简单,在视图函数中都是有参数的,如要实现
打印“您好,无涯”,把无涯当作一个参数,那么需要在视图函数中增加一个name的参数,这个参数随
着调用的时候,输入不同的值显示不同的结果,那么要实现这样的效果,它的源码为:
from flask import Flask app = Flask(__name__) app.config.from_pyfile('config.py',silent=True) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/index/<name>') def index(name): return 'Hello {0}'.format(name) if __name__ == '__main__': app.run()
如果在路由中需要指定请求的参数它的数据类型,如int类型,那么就需要在注册路由的时候指定请求
参数的类型,修改后的视图函数为:
@app.route('/index/<int:articleID>') def index(articleID): return '文章ID: {0}'.format(articleID)
在GET的请求中,经常基于业务的需要,需要通过参数来当传递请求参数的过程,如写一个搜索的
案例代码,它的视图函数源码为:
from flask import Flask,request app = Flask(__name__) app.config.from_pyfile('config.py',silent=True) @app.route('/s/') def so(): wd=request.args.get('wd') return '通过查询搜索的关键字为:{0}'.format(wd) if __name__ == '__main__': app.run()
在如上的源码中可以看到,首先需要导入request,然后在视图函数中,在GET的请求中获取查询的关键字,
然后把查询的关键字打印出来。
还有另外一种场景是返回多个URL的地址,依据不同的URL显示不同的信息,如输入博客的地址返回
博客的信息,依据用户的信息返回用户的信息。增加新的视图函数,它的源码为:
@app.route('/<any(blog,user):url_path>/<uid>/') def login(url_path,uid): if url_path=='blog': return '博客的首页详细信息为:{0}'.format(uid) elif url_path=='user': return '无涯课堂首页详细信息为:{0}'.format(uid)