购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.6 其他

4.6.1 转义

在模板渲染字符串时,字符串中有可能包含一些危险的字符,如&、<、>、"、'等。这些字符会破坏原来HTML标签的结构,更严重的可能会发生XSS跨域脚本攻击。因此,遇到这些特殊字符时,应该将其转义成HTML能正确表示这些字符的写法,如<(小于号)在HTML中应该用<来表示。

在使用render_template渲染模板时,Flask会针对以.html、.htm、.xml和.xhtml结尾的文件进行全局转义,但是对于其他类型的文件,则不会开启全局转义。当然针对以.html、.htm、.xml、.xhtml结尾的文件,如果要关闭全局转义,通过设置app.jinja_env.autoescape=False即可关闭。如果要渲染由用户提交上来的字符串,强烈建议开启全局转义。

在没有开启自动转义的情况下,对于一些不信任的字符串,可以通过{{ value|escape }}进行局部转义。在开启了自动转义的情况下,对于一些安全的字符串,可以通过{{ value|safe }}进行局部关闭转义。使用autoescape语法可以将一段代码块整体关闭或开启自动转义。示例代码如下。

    {% autoescape false %}
      <p>这个里面的关闭了自动转义</p>
      <p>{{ will_not_be_escaped }}</p>
    {% endautoescape %}

如果将以上代码中的false改成true,将在autoescape代码块中开启自动转义。

4.6.2 加载静态文件

一个网页中除了HTML代码以外,还需要CSS、JavaScript和图片文件的综合应用才能更加美观和实用。静态文件默认存放到当前项目的static文件夹中,如果要修改静态文件存放的路径,可以在创建Flask对象时设置static_folder参数,示例代码如下。

    app = Flask(__name__,static_folder='C:\static')

在模板文件中,可以通过url_for加载静态文件,示例代码如下。

    <link href="{{ url_for('static',filename='about.css') }}">

url_for的第1个参数static是固定的,表示生成一个静态文件的URL;第2个参数filename是可以传递的文件名或者文件路径,路径是相对于static或者static_folder参数自定义的路径。以上代码在被模板渲染后,会被解析成如下形式。

    <link href="/static/about.css">

4.6.3 闪现消息

用户在发送一个请求后,网站可能需要给这个用户一些提示,如登录成功提示、登录失败提示,这时可以用闪现消息解决。使用闪现消息,需要先在视图函数中通过flash函数提交消息内容,消息内容可以有多条,然后在模板中再使用get_flashed_messages函数获取视图函数中提交的消息内容。get_flashed_message函数返回的是一个列表,因此需要用for循环或者通过下标取出消息内容。闪现消息的视图函数部分示例代码如下。

    @app.route("/flash")
    def myflash():
        flash("我是消息内容1...")
        flash("我是消息内容2...")
        return render_template("flash.xhtml")

闪现消息的模板部分示例代码如下。

    <ul>
        {% for message in get_flashed_messages() %}
             <li>{{ message }}</li>
        {% endfor %}
    </ul>

因为闪现消息是存储在session中的,使用session之前必须要在app.config中设置SECRET_KEY,如果读者没有设置SECRET_KEY,那么会出现如图4-9所示的错误信息页。

图4-9 错误信息页

我们可以在app.config中随便设置一个字符串,示例代码如下。

    app.config['SECRET_KEY'] = "ewgnlwe&S;(12zd-+"

在刷新浏览器页面后,即可看到闪现消息内容,如图4-10所示。

图4-10 模板中显示闪现消息 VbA1IIX0M//ZnzwR9qyt8uyoY29ZtUuOUFtiRwvQnA4DcyRQkjO3FpOyfKUfTc7O

点击中间区域
呼出菜单
上一章
目录
下一章
×