在第一节中,启动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显示不同的信息,如输入博客的地址返回博客的信息,依据用户的信息返回用户的信息。增加新的视图函数,它的源码为:
@bp.route('/<any(blog,user):url_path>/<uid>/')
def res(url_path,uid):
if url_path=='blog':
return '博客的首页详细信息为{0}'.format(uid)
elif url_path=='user':
return '首页详细信息为{0}'.format(uid)