- 主题:问一个网页数据填充方案的选择问题
最近在学flask,发现里面的jinja2在渲染填充网页方面很强大,基本上都可以通过后台获取数据后,直接用模板渲染得到网页然后推送给浏览器。
印象中,还有一种模式是用javascript动态获取数据,然后动态渲染填充网页。而web框架主要提供一个静态页面的展现和相应API。
感觉对简单的网页来说,这两个方案没什么差别。但是还是想了解一下,决定两者的选择会有哪些方面的考量?
--
FROM 111.203.9.*
后者是学flask的下一步,学fastapi...
【 在 ToTOtOToT 的大作中提到: 】
: 最近在学flask,发现里面的jinja2在渲染填充网页方面很强大,基本上都可以通过后台获取数据后,直接用模板渲染得到网 ...
--
FROM 223.93.3.*
这两个的场景不同,通常不能互相替代。
flask是可以动态生成网页,但你的网页如果需要是动态地更新数据,那还是得搞javas
cript,要不然你就得每次数据更新时全刷页面,那样用户体验就比较差。
你说的网页够简单,那flask渲染好就行了。
【 在 ToTOtOToT 的大作中提到: 】
: 最近在学flask,发现里面的jinja2在渲染填充网页方面很强大,基本上都可以通过后台获取数据后,直接用模板渲染得到网页然后推送给浏览器。
: 印象中,还有一种模式是用javascript动态获取数据,然后动态渲染填充网页。而web框架主要提供一个静态页面的展现和相应API。
: 感觉对简单的网页来说,这两个方案没什么差别。但是还是想了解一下,决定两者的选择会有哪些方面的考量?
: ...................
--
FROM 60.191.31.*
起初,网站是静态的,服务器直接返回硬盘上网页文件的内容。
进而,在静态内容里穿插几行代码,就动态了,用过 ASP 的都知道是怎么回事。
(早期 PHP 也那样,可是后来 PHP 也发展了)
后来有了前端和后端的分工,前端负责实现网站的样式和交互,后端负责内容,
模板引擎就是一种前后端分离的实现方式。
但模板引擎仍然是在服务器上生成所有页面内容。虽然他们来自不同人的工作。
再后来,有人觉得这样每次刷新页面,变化的不变的都要从服务器传到客户端,
代价大,就搞了所谓 ajax,就是你所说的后面那种模式(的一部分)。
而传统方案有可能导致前后端的界线不那么明确,比如你 jinja2 里实现的逻
辑本质上还是 python 代码,把一个浮点数渲染成字符串,模板做,没问题,
把一个 datetime 对象渲染成字符串,模板做,还凑合,那要把一个 ORM 对象
渲染成一个表单呢?前端不可避免的要接触到后端的逻辑,不利于解耦。
另外,如果要实现浏览器和用户的交互,前端肯定要用到 javascript,但模板
引擎要么就是后端语言(比如 jinja2 - python,当然 jinja2 也有其它语言
的实现),要么就是一种生造的语言。既然前端已经用了 javascript,那为什
么要再学一种新的呢?
所以后者现在更时兴,因为界线就在 HTTP 请求上,后端无论什么语言,实现
的都是一样的 HTTP 响应,前端只用 javascript 来解析响应,填充页面就行
了。页面的空壳,就像最初的网站一样,直接由 HTTP 服务器来处理。
两种方式也可能有交集,比如用 ajax 请求渲染好的 HTML 页面(的一部分),
或者说首页用模板填充,翻第二页的时候用 API 动态加载。两种都不是万能的
得看具体情况。
【 在 ToTOtOToT 的大作中提到: 】
: 最近在学flask,发现里面的jinja2在渲染填充网页方面很强大,基本上都可以通过后台获取数据后,直接用模板渲染得到网页然后推送给浏览器。
: 印象中,还有一种模式是用javascript动态获取数据,然后动态渲染填充网页。而web框架主要提供一个静态页面的展现和相应API。
: 感觉对简单的网页来说,这两个方案没什么差别。但是还是想了解一下,决定两者的选择会有哪些方面的考量?
: ...................
--
FROM 221.217.55.*
谢谢各位的答复,大概比较清楚两种模式的适用场景。我之前见自己用的web小项目的时候,一般用web.py这个原始框架,模板渲染和javascript都用过,只是一直没想明白在起新项目的时候如何取舍,看来还是要根据实际的业务需求和用户体验来确定
【 在 wincss 的大作中提到: 】
: 起初,网站是静态的,服务器直接返回硬盘上网页文件的内容。
: 进而,在静态内容里穿插几行代码,就动态了,用过 ASP 的都知道是怎么回事。
: (早期 PHP 也那样,可是后来 PHP 也发展了)
: ...................
--
FROM 101.69.230.*