用 Python 生成 HTML 十分无趣,而且相当繁琐,因为我们必须手动对 HTML 做转义来保证应用的安全。为此,Flask 配备了 Jinja2 模板引擎。我们可以使用 render_template() 方法来渲染模板。并且需要做的一切就是将模板名和我们想作为关键字的参数传入模板的变量。来看一个简单的模板渲染的实例:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask 会在 templates 文件夹里寻找模板。所以,如果我们的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录 ,来看下几种目录的情况:
/application.py
/templates
/hello.html
第二种来看下:
/application
/__init__.py
/templates
/hello.html
再来看html的实例:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
在模板(html)里,我们可以访问各种函数,详细的内容我们后面的文章中会有记录。我们现在来看自动转义功能。
自动转义功能默认是开启的,所以如果 name 包含 HTML ,它将会被自动转义。如果我们能信任一个变量,并且我们知道它是安全的(例如一个模块把 Wiki 标记转换为 HTML),我们可以用 Markup 类或 |safe 过滤器在模板中把它标记为安全的。
我们来看一个 Markup 类如何使用的简单例子:
>>> from flask import Markup
>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'
Markup(u'<strong>Hello <blink>hacker</blink>!</strong>')
>>> Markup.escape('<blink>hacker</blink>')
Markup(u'<blink>hacker</blink>')
>>> Markup('<em>Marked up</em> » HTML').striptags()
u'Marked up \xbb HTML'
不过在flask0.5 版之后,自动转义不再在所有模板中启用,它只会在.html 、 .htm 、.xml 、 .xhtml,这些扩展名的模板会触发自动转义,从字符串加载的模板会禁用自动转义。
好啦,本次记录就到这里了。
如果感觉不错的话,请多多点赞支持哦。。。

本文介绍如何使用Flask框架结合Jinja2模板引擎渲染HTML页面,并探讨了自动转义功能及其安全性保障措施。
676

被折叠的 条评论
为什么被折叠?



