flask 模板引擎

# 模板引擎

### 蓝本使用

- 说明:

  当大量视图函数放在一个文件中,很明显是不合适的。最好的时解决方案是根据需要将相关的视图函数放在单独的文件中。蓝本就是为了解决这个问题而出现的。

- 使用:

  ```python
  # 导入蓝本
  from flask import Blueprint

  # 创建对象,可以统一指定路由前缀
  user = Blueprint(‘user‘, __name__, url_prefix=‘/user‘)

  # 添加视图函数
  @user.route(‘/login/‘)
  def login():
      return ‘欢迎登录‘

  @user.route(‘/register/‘)
  def register():
      return ‘欢迎注册‘

  # 注册蓝本(蓝本不注册不能使用),也可以指定路由前缀(优先级更高)
  from user import user
  app.register_blueprint(user, url_prefix=‘/u‘)
  ```

  ### cookie

- 说明:

  因为HTTP协议是无状态无连接的,因此当用户在一个网站做连续操作,每次都需要提供用户身份信息;为了简化这种操作,我们可以通过cookie携带特定的信息。当第一次访问网站时设置,以后每次访问都携带。

- 使用:

  ```python
    from flask import Blueprint, request, make_response

    cookie = Blueprint(‘cookie‘, __name__)

    # 获取cookie
    @cookie.route(‘/get/‘)
    def get_cookie():
        return request.cookies.get(‘name‘, ‘你是哪个二哥?‘)

    # 设置cookie
    @cookie.route(‘/set/‘)
    def set_cookie():
        resp = make_response(‘cookie已设置‘)
        # 设置cookie,默认有效期为浏览器关闭
        # max_age:有效期,是一个整数,推荐使用
        # expires:有效期,是一个datetime类型数据
        resp.set_cookie(‘name‘, ‘二狗子‘, max_age=10)
        return resp

    # 删除cookie
    @cookie.route(‘/del/‘)
    def del_cookie():
        resp = make_response(‘cookie已删除‘)
        # 删除cookie,其实是设置cookie立即失效
        resp.delete_cookie(‘name‘)
        return resp
  ```

### session

- 说明:

  session是比cookie更加安全的一种携带有效信息的方式,功能与cookie相同。

- 分类:

  - server side session:数据存在服务器上,客户端保存的是session_id(通过cookie传输)
  - client side session:将session数据加密,编码,然后存放在客户端,flask默认采用这样方式

- 使用:

  ```python
  from flask import Blueprint, session

  sess = Blueprint(‘session‘, __name__)

  # 获取session
  @sess.route(‘/get/‘)
  def get_session():
      return session.get(‘name‘, ‘who are you?‘)

  # 设置session
  @sess.route(‘/set/‘)
  def set_session():
      # 设置永久有效,默认浏览器关闭即失效
      # 设置为True时,有效才有意义,
      # 有效期由配置选项PERMANENT_SESSION_LIFETIME指定
      # 默认有效期是31天
      session.permanent = True
      session[‘name‘] = ‘wangdahua‘
      return ‘session已设置‘

  # 删除session
  @sess.route(‘/del/‘)
  def del_session():
      # 删除指定session,第二参数设置None,删除不存在的session也不报错
      # session.pop(‘name‘, None)
      # 清空所有session
      session.clear()
      return ‘session已删除‘
  ```

### flask-session

- 说明:

  是将session数据保存到服务器的解决方案。

- 安装:`pip install flask-session`

- 使用:将session存储到redis中

  ```python
  from flask import Flask, session
  from flask_script import Manager
  from flask_session import Session
  from redis import Redis

  app = Flask(name)
  # 配置
  # 是否拥有生效,设置为True之后,有效期由下面选项决定
  app.config[‘SESSION_PERMANENT‘] = True
  # 默认31天,可以是timedelta或int的数据
  app.config[‘PERMANENT_SESSION_LIFETIME‘] = 10
  # 指定session的保存方式
  app.config[‘SESSION_TYPE‘] = ‘redis‘
  # 指定redis连接实例,默认127.0.0.1,6379端口,0数据库
  app.config[‘SESSION_REDIS‘] = Redis()

  manager = Manager(app)
  sess = Session(app)

  @app.route(‘/‘)
  def index():
      return ‘flask-session‘

  @app.route(‘/get/‘)
  def get_session():
      return session.get(‘name‘, ‘who are you?‘)

  @app.route(‘/set/‘)
  def set_session():
      session[‘name‘] = ‘ergou‘
        return ‘session已设置‘

  if __name__ == ‘__main__‘:
      manager.run()
  ```

### 模板引擎

- 说明:

  模板文件就是按照特定规则书写的负责展示效果的HTML文件;模板引擎就是提供特定替换和解析的工具。

- Jinja2:

  在flask中使用的是Jinja2模板引擎,它是由flask核心开发人员开发的。

###Jinja2语法

- 目录结构      

  ```
  project/
        manage.py            # 启动控制代码
        templates/            # 模板文件目录
  ```

- 模板渲染

  - 在`templates`目录下创建一个模板文件`index.html`
  - 在视图函数中渲染模板`render_tempate(‘index.html‘)`
  - 设置模板文件自动加载`app.config[‘TEMPLATES_AUTO_RELOAD‘] = True`
  - 渲染模板字符串`render_template_string(‘<h1>Hello World!</h1>‘)`

- 使用变量

  - 需要将解析的变量放在`{{ }}`中
  - 在渲染模板时需要将解析的变量分配过去,特殊的除外(g)
  - 注释写在`{# #}`中
  - 渲染模板字符串的方式与渲染模板文件相同

- 使用过滤器

  - 说明:过滤器就是对要解析的变量进行特定的处理后,然后在输出。
  - 使用:`{{ name | upper }}`,转换为全大写输出
  - 常用过滤器:

  | 过滤器        | 说明                |
  | ---------- | ----------------- |
  | upper      | 全大写               |
  | lower      | 全小写               |
  | title      | 每个单词首字母大写         |
  | capitalize | 首字母大写             |
  | trim       | 去掉两边的空白           |
  | striptags  | 过滤掉HTML标签         |
  | safe       | 渲染时不转义(默认会转义所有内容) |

  - 在模板文件中,动态开启关闭转义

  ```html
  {% autoescape False %}
  <div>Hello {{ name }}</div>
  {% endautoescape %}
  ```

- 流程控制

  ```html
  {% if name %}
      <h1>Hello {{ name }}</h1>
  {% else %}
      <h1>Hello World!</h1>
  {% endif %}

  <ol>
  {% for i in range(10) %}
      <li>{{ i }}</li>
  {% endfor %}
  </ol>
  ```

- 文件包含

  - 说明:可以避免大量的重复书写,包含相当于将被包含的内容粘贴过来。
  - 使用:`{% include ‘include2.html‘ %}`

- 宏的使用

  - 定义宏:`{% macro 宏名(参数) %}宏内容{% endmacro %}`
  - 调用宏:`{{ 宏名(参数) }}`
  - 导入宏:`{% from ‘宏所在文件‘ import 宏名 %}`
  - 说明:宏采用了类似于python中的函数进行定义和调用,可以减少代码的重复书写。

- 模板继承

  - 说明:一个网站的多个页面,具有相同的结构,只有少许的差别,可以通过继承减少重复书写。
  - 使用:
    - 需要先定义一个基础模板,专门用来被其他模板继承的,将其中可能需要修改的地方使用block起名
    - 子模板继承基础模板需要使用:`{% extends ‘基础模板‘ %}`
    - 在子模板中可以根据block名字对父级模板中的内容进行修改、删除等操作
    - 若想保留父父模板中的内容,可以通过:`{{ super() }}`

### 练习:

- 自己定义一个基础模板,可以使用bootstrap样式,让其他模板继承
- 自己学习flask-bootstrap扩展的使用,然后定制基础模板

原文地址:https://www.cnblogs.com/liangliangzz/p/10221975.html

时间: 2024-08-08 02:44:27

flask 模板引擎的相关文章

Flask Web Development - Flask 模板1 - 模板机制&Jinja2引擎

节选自PartI Chapter3,这个chapter主要讲模板工作原理,这里讲的就是Jinja2这个模板,另外还提到了Flask-Bootstrap及Flask-Moment两个插件,前者对Flask使用Bootstrap做了些封装,后者对moment.js做了些封装.内容较多,估计分开搞. 模板存在的意义 可维护性高的代码是结构良好且整洁的. 当用户在网站注册一个账户时,他在表单里填入邮箱跟密码,并点击提交按钮.在server端就收到一个包含这些数据的request,再由Flask分发到相应

flask jinja2模板引擎

from flask import Flask, jsonify,render_templateapp = Flask(__name__) @app.route("/")def hello(): return jsonify({"username":"hello world! Zhang"}) @app.route("/jinja2")def jinja2(): return render_template('jinja2.h

Flask 模板(一)

使用模板有助于将业务逻辑与表现逻辑分开,更易于维护.模板是已经建立的网页代码,其中部分动态数据需要在请求的上下文中用具体值替换. flask中使用了Jinja2模板引擎,储存在templates文件夹中. templates/index.html<h1>Hello World!</h1> 使用 {{ name }} 占位 templates/user.html <h1>Hello, {{ name }}!</h1> 模板的渲染 模板的渲染即用真实值取代模板中

Jinja2模板引擎简介

视图函数的作用是 : 处理业务逻辑和返回响应内容. 在开发中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本,这个时候使用模板,让它来承担返回响应的内容,能够使代码结构清晰,耦合度低 模板是一个包含响应文本的文件,flask中常用的是Jinja2这个模板引擎来渲染模板  渲染就是使用真实值替换变量,返回字符串的过程. Jinja 是模板引擎,是由python实现的模板语言,flask内置的模板语言. 模板语言是一种被设计来自动生成文档的简单文本格式. 项目下创建template文件夹

第六章:FLASK模版引擎以及模版方法

一,上节回顾: 1) 什么是蓝图? 2) 为什么用蓝图? 3) 怎么实例化一个蓝图? 4) 怎么将蓝图注册到flask的核心对象上? 二,什么是模版引擎? 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档.(摘自 百度百科) 三,模版引擎都有什么?flask用的是什么模版引擎? 模版引擎有很多种,像 PHP(smarty)  Python(Janjia,marco)  Java(

flask模板的基本用法、模板语法、渲染模板、模板辅助工具

flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成. 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTML代码中插入变量,这时我们需要使用模板引擎(template engine).借助模板引擎,我们可以再HTML文件中使用特殊的语法来标记变量,这类包含固定内容和动态部分的可重用文件称为模板(template). 模板引擎的作用就是读取并执行模板中的特殊语法标记,并根据传入的数据将变量替换为实际值,输

5. Flask模板

一.Jinja2模板引擎 1. 定义 ? 视图函数的主要作用是生成请求的响应,这是最简单的请求.实际上,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容. ? 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取.使用真实值替换变量,再返回最终得到的字符串,这个过程称为"渲染".Flas

artTemplate模板引擎学习实战

在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javascript引擎.而javascript引擎的实质就是帮我们把带有JavaScript代码的伪THTML语句编译为HTML. 如果有不了解的朋友,可以前往这两篇文章: 淘宝购物车页面 PC端和移动端实战 淘宝购物车页面 智能搜索框Ajax异步加载数据 源码地址: GitHub:Uncle-Keith 回

使用模块化思维和模板引擎搭建前端架构(require+underscore)

require.js 介绍: 是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量. 官网:http://www.requirejs.cn/    (PS:如果没接触过,刚开始看都是一头蒙蔽的,建议看下菜鸟教程) 新手教程:http://www.runoob.com/w3cnote/requirejs-tutorial-1.html 优点:可完成团队协作.模块复用.单元测试等等一系列复杂的需求 undersco