《Flask Web开发》 读书笔记

github随书demo

  • 处理 URL 和函数之间关系的程序称为路由
  • Flask 使用上下文临时把某些对象 变为全局可访问(避免大量可有可无的参数把视图函数弄得一团糟)

Flask 中有两种上下文:程序上下文和请求上下文

变量名 上下文 说 明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文 请求对象,封装了客户端发出的 HTTP 请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典
  • 模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请 求的上下文中才能知道。

jinjia2 模板

官方文档

渲染模板

默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板。

from flask import Flask, render_template 
# ...
@app.route('/')
def index():
  return render_template('index.html')
@app.route('/user/<name>')
def user(name):
  return render_template('user.html', name=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 }}
过滤器名 说 明
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉

控制结构

Jinja2 提供了多种控制结构,可用来改变模板的渲染流程。

  • 条件语句
{% if user %}
  Hello, {{ user }}!
{% else %}
  Hello, Stranger!
{% endif %}
  • 循环语句
<ul>
  {% for comment in comments %}
    <li>{{ comment }}</li> 
  {% endfor %}
</ul>
  • Jinja2 还支持宏。宏类似于 Python 代码中的函数。例如:
{% macro render_comment(comment) %} 
  <li>{{ comment }}</li>
{% endmacro %}
<ul>
  {% for comment in comments %}
    {{ render_comment(comment) }}
  {% endfor %}
</ul>
  • 为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:
{% import 'macros.html' as macros %}
<ul>
  {% for comment in comments %}
    {{ macros.render_comment(comment) }}
  {% endfor %} 
</ul>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容