【Python Flask】 Web开发学习笔记——模版

书籍:《Flask Web开发:基于Python的Web应用开发实战》

作者代码地址:miguelgrinberg/flasky

书中说:

“视图函数的作用很明确,即生成请求的响应,如第 2 章中的示例所示。对最简单的请求来说,这就足够了,但一般而言,请求会改变程序的状态,而这种变化也会在视图函数中产生。”

“例如,用户在网站中注册了一个新账户。用户在表单中输入电子邮件地址和密码,然后点击提交按钮。 服务器接收到包含用户输入数据的请求,然后 Flask 把请求分发到处理注册请求的视图函数。 这个视图函数需要访问数据库,添加新用户,然后生成响应回送浏览器。这两个过程分别称为业务逻辑表现逻辑。”

这里我理解的表现逻辑类似于三层开发中的数据访问层,如下是百度百科的解释:

“所谓的三层开发就是将系统的整个业务应用划分为表示层,业务逻辑层和数据访问层,这样有利于系统的开发、维护、部署和扩展。

分层是为了实现“高内聚,低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,延展和分配资源。

业务逻辑层负责系统领域业务的处理,负责逻辑性数据的生成、处理及转换。对所输入的逻辑性数据的正确性及有效性负责,但对输出的逻辑性数据及用户性数据的正确性不负责,对数据的呈现样式不负责。”

不过也有可能这里理解有误 OvO 因为标准数据访问层的定义是实现对数据库的各种访问功能,这里又不太一样。

 

Flask的模版:

模版:是一个包含响应文本的文件。把表现逻辑移到模版中可提高程序的可维护性。

Flask使用Jinja2模型渲染引擎。这里所谓的渲染就是将URL中可变部分的值进行替换然后得到最终的响应字符串。

变量:在模版中使用{{ name }},name即是一个变量,在进行渲染模版时传入这个参数。

Jinja2能够识别所有类型变量,包括列表,字典,甚至是对象。

<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>

上面的第四行即是一个对象的方法。

过滤器:用于修改变量的一个东西。Hello, {{ name|capitalize }},可以将name变量的值以首字母大写的方式显示,其中的capitalize就是一个过滤器名。

控制结构:Jinja2中实现的可以用来改变模版的渲染流程的控制结构,例如:

条件控制语句:

{% if user %}
    Hello, {{ user }}!
{% else %}
    Hello, Stranger!
{% endif %}

for循环语句:

<ul>
    {% for comment in comments %}
        <li>{{ comment }}</li>
    {% endfor %}
</ul>

模版还可以使用宏,甚至进行模版继承。

 

自定义错误页面:使用app.errorhandler()装饰器:

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

 

静态文件:例如HTML中的图片,JavaScript源码文件,CSS都是静态文件。

{% block head %}
{{ super() }}
<link rel="shortcut icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
    type="image/x-icon">
<link rel="icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
    type="image/x-icon">
{% endblock %}

其中,url_for()函数使用程序URL映射中保存的信息生成URL。这里的作用就是取得静态文件favicon.ico的URL地址。

更多文章与笔记请关注:微信公众号:二进制树

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章