美文网首页框架
《Flask Web开发》 读书笔记

《Flask Web开发》 读书笔记

作者: fat___lin | 来源:发表于2019-02-26 15:49 被阅读23次

    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>
    

    相关文章

      网友评论

        本文标题:《Flask Web开发》 读书笔记

        本文链接:https://www.haomeiwen.com/subject/jqywyqtx.html