博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Templates in Flask & MVC pattern
阅读量:4099 次
发布时间:2019-05-25

本文共 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 模式。

这里写图片描述

维基百科上有简单的介绍:

  • The model is the central component of the pattern. It expresses the application’s behavior in terms of the problem domain, independent of the user interface. It directly manages the data, logic and rules of the application.
  • A view can be any output representation of information, such as a chart or a diagram. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.
  • The third part, the controller, accepts input and converts it to commands for the model or view.

以上面flask应用为例:

Model实现了数据库和Python对象的映射。上面的例子中,Model就是隐藏的一个dict{ 'name': 'Michael' }Model将数据传到模板中。这些过程是在python 代码中实现的。

View 实现了生成数据,即用户看到的页面。这个过程是在jinja2模板中实现的。
Controller在这里不明显,和Model 都在python 代码中。根据用户输入来操作ModelView。这里理解成根据用户输入的URL 来返回一个模板,同时传入name 参数。


你可能感兴趣的文章
决策树的概念,分类和初步的建树过程
查看>>
决策树中的ID3, C4.5, CART算法及其优缺点
查看>>
Pandas 踩坑 dataframe.index.values
查看>>
在 PyPI 上发布 python 包
查看>>
DRF项目工程基础包
查看>>
inception安装使用
查看>>
Django Rest Swagger生成api文档
查看>>
docker-compose 环境变量问题
查看>>
vue 配置后台接口方式
查看>>
drf jwt 认证
查看>>
Vue 初体验
查看>>
记一次sentry部署过程
查看>>
python 开发环境配置
查看>>
Docker 部署Django项目
查看>>
Docker部署Vue 工程包
查看>>
CentOS7使用Docker Overlay存储驱动并更改日志驱动
查看>>
CentOS7修改Docker镜像默认存储位置
查看>>
python 变量进阶(理解)
查看>>
scrapy 框架入门
查看>>
scrapy爬取伯乐在线文章
查看>>