本文共 2162 字,大约阅读时间需要 7 分钟。
前几天主要学习了 WSGI
的原理。
flask 封装了很多代码,不用自己去构建本地服务器,不用了解服务器怎样接受HTTP请求、解析HTTP请求、发送HTTP响应到服务器。
使用Flask时,不用去了解底层实现的原理。只要知道,在flask
应用中写一个视图函数,浏览器输入相应的地址,就会看到视图函数中的内容。(flask是开发框架,也许这就是开发框架存在的意义。)
例如,简单的这个flask
应用,路由那一块儿,显示绑定的/
和 index()
的映射关系,运行 flask
应用,在浏览器中输入/,就会看到index()
函数的响应内容。
然后,web 开发
就变得简单起来,只要继续添加这种 URL
和函数的关系。然后在浏览器中输入不同的URL
,来访问不同的函数,就会得到不同的响应。
from flask import Flaskapp = Flask(__name__)@app.route("/")def index(): return "2017-08-26"if __name__ == '__main__': app.run(debug=True)
上面例子中视图函数的响应是字符串,Flask
中的make_reponse()
会将字符串变成浏览器能接收的形式。
当然,视图函数的响应可以是 html
文档,比如修改上面例子中的返回值为 html
文档,网页中的效果和字符串形式一致:
from flask import Flaskapp = Flask(__name__)@app.route("/")def index(): return '''2017-08-26
'''if __name__ == '__main__': app.run(debug=True)
对于简单的响应,这样写没问题,如果想要显示更复杂的响应,Flask
提供了模板和模板渲染的方法。(Flask
默认使用jinja2
模板)
关于渲染,这样理解:视图函数将变量值传入模板,使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。
例如,使用模板渲染,在上面的flask
应用中添加一个针对个人,生成欢迎消息页面的动态路由:
from flask import Flask, render_templateapp = Flask(__name__)@app.route("/")def index(name): return render_template('index.html',name=name)if __name__ == '__main__': app.run(debug=True)
templates/index.html
中:
Welcome, { { name }} !
2017-08-26
可以看到,使用模板渲染的方法,视图函数可以生成更加复杂的响应。
通过模板渲染方法,将python
代码和 html
代码分开了,flask
应用代码的可读性也变强了。
然后到了MVC 模式。
维基百科上有简单的介绍:
以上面flask应用为例:
Model
实现了数据库和Python对象的映射。上面的例子中,Model
就是隐藏的一个dict
:{ 'name': 'Michael' }
,Model
将数据传到模板中。这些过程是在python
代码中实现的。
View
实现了生成数据,即用户看到的页面。这个过程是在jinja2
模板中实现的。 Controller
在这里不明显,和Model
都在python
代码中。根据用户输入来操作Model
或 View
。这里理解成根据用户输入的URL
来返回一个模板,同时传入name
参数。 完