1. 什么是Jinja2模板引擎

python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html文件)分开的, 使得代码的可读性增强, 代码容易理解和维护;
模板渲染: 在html文件中,通过动态赋值,将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。

2. 语法

2.1 Jinja2变量显示语法: {{ 变量名 }}#  完整的过滤器查看位置: http://jinja.pocoo.org/docs/templates/#builtin-filtersJinja2变量内置过滤器:safe            渲染值时不转义capitalize      把值的首字母转换成大写,其他字母转换成小写lower           把值转换成小写形式upper           把值转换成大写形式title           把值中每个单词的首字母都转换成大写trim            把值的首尾空格去掉striptags       渲染之前把值中所有的 HTML 标签都删掉
2.2 for循环:{% for i in li%}{% endfor %}
2.3 if语句:{% if user == 'westos'%}{% elif user == 'hello' %}{% else %}{% endif%}
2.4 宏的操作,相当于函数:{%  macro render(id) %}<h1>hello world {{ id }}</h1>{% endmacro %}
2.5 调用定义好的宏(类似于python中的函数):{{ render(1) }}{{ render(2) }}{{ render(3) }}
2.6 include包含操作:{% include inclued.html"%}
2.7 模板的继承: 一般网站的导航栏和底部不会变化, 为了避免重复编写导航栏信息2.7.1 定义模板:
    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{% block title %}  {% endblock %}</title></head><body><div style="width: 100px; height: 200px" > 这是导航栏</div>{% block body %}hello{% endblock %}<div style="width: 100px; height: 200px" >这是底部</div></body></html>
 2.7.2 继承模板:{% extends '06_base.html'%}

3. flask项目静态文件导入

<link href="/static/css/bootstrap.css" rel="stylesheet">
<link href="{{ url_for('static', filename="css/bootstrap.css") }}"rel="stylesheet">

4. flask链接的导入

<a href="/register/">注册</a>
<a href="{{ url_for('login') }}">登录</a>
# 根据视图函数动态的去查找路径;
<a href="{{ url_for('delete', username="root") }}">删除</a>  === /delete/root/

5. 消息闪现

5.1 什么是消息闪现:flash("闪现的消息")是Flask的核心特性。用于在下一个响应中显示一个消息,让用户知道状态发生了变化。可以使确认消息,警告或者错误提醒。
5.2 消息闪现工作原理:闪现系统使得在一个请求结束的时候记录一个信息,然后在且仅在下一个请求中访问这个数据。
5.3 html代码中如何调用闪现内容:仅调用flash()函数并不能把消息显示出来,程序使用的模板要渲染这些消息。Flask把get_flashed_messages()函数开放给模板,用来获取并渲染消息。
5.4 让每个页面都可以获取闪现信息闪现:{% for item in get_flashed_messages() %}<div class="alert alert-warning alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><spanaria-hidden="true">&times;</span></button>{{ item }}</div>{% endfor %}

6. session信息的使用

6.1 什么是session信息:服务端缓存
6.2 session的作用:Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
6.3 session值的设置、获取及删除:session['name'] = 'hello world'session.get('name')session.pop('name')
6.4 判断用户是否登陆成功:from _curses import flashfrom functools import wrapsfrom flask import session, redirect, url_fordef is_login(f):"""用来判断用户是否登录成功"""@wraps(f)def wrapper(*args, **kwargs):# 判断session对象中是否有seesion['user'],# 如果包含信息, 则登录成功, 可以访问主页;# 如果不包含信息, 则未登录成功, 跳转到登录界面;;if session.get('user', None):return f(*args, **kwargs)else:flash("用户必须登录才能访问%s" % (f.__name__))return redirect(url_for('login'))return wrapper
6.5 判断用户是否为管理员:from _curses import flashfrom functools import wrapsfrom flask import session, redirect, url_fordef is_admin(f):"""用来判断用户是否登录成功"""@wraps(f)def wrapper(*args, **kwargs):# 判断session对象中是否有seesion['user']等于root,# 如果等于, 则为管理员, 可以访问;# 如果不等于, 则不是管理员, 跳转到登录界面;;if session.get('user', None) == 'root':return f(*args, **kwargs)else:flash("只有管理员root才能访问%s" % (f.__name__))return redirect(url_for('login'))return wrapper

7. Flask中集成Bootstrap

7.1 Flask中如何集成Bootstrap:使用 pip 安装Flask_Bootstrapfrom flask.ext.bootstrap import Bootstrapbootstrap = Bootstrap(app)
7.2 Flask-Bootstrap实现了什么:利用 Jinja2 的模板继承机制,让程序扩展一个具有基本页面结构的基模板,其中就有用来引入 Bootstrap 的元素。{ % extends "bootstrap/base_other.html" % }基模板中定义了可在衍生模板中重定义的块。块名                     说 明doc                     整个 HTML 文档html_attribs            <html> 标签的属性html <html>             标签中的内容head <head>             标签中的内容title <title>           标签中的内容metas                   一组 <meta> 标签styles                  层叠样式表定义body_attribs            <body> 标签的属性body                    <body> 标签中的内容navbar                  用户定义的导航条content                 用户定义的页面内容scripts                 文档底部的 JavaScript 声明程序需要向已经有内容的块中添加新内容,必须使用 Jinja2 提供的 super() 函数,先执行块中原有的内容,后执行自己写的内容,根据距离优先原则,会将块中原有的部分内容替换为自己写的内容,完成对块中内容的添加及替换。{% block scripts %}{{ super() }}<script type="text/javascript" src="my-script.js"></script>{% endblock %}

8. Flask中集成web表单处理

8.1 什么是表单处理:在网页中,为了和用户进行信息交互总是不得不出现一些表单。flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据。WTForm中最重要的几个概念如下:1). Form类,开发者自定义的表单必须继承自Form类或者其子类。Form类最主要的功能是通过其所包含的Field类提供对表单内数据的快捷访问方式。2). 各种Field类,即字段。一般而言每个Field类都对应一个input的HTML标签。比如WTForm自带的一些Field类,比如BooleanField就对应<input type="checkbox">,SubmitField就对应<input type="submit">等等。3). Validator类。这个类用于验证用户输入的数据的合法性。比如Length验证器可以用于验证输入数据的长度,FileAllowed验证上传文件的类型等等。另外,flask为了防范csfr(cross-site request forgery)攻击,默认在使用flask-wtf之前要求app一定要设置过secret_key。最简单地可以通过app.config['SECRET_KEY'] = 'xxxx'来配置。常见的Field类PasswordField     密码字段,自动将输入转化为小黑点DateField         文本字段,格式要求为datetime.date一样IntergerField     文本字段,格式要求是整数DecimalField      文本字段,格式要求和decimal.Decimal一样FloatField        文本字段,值是浮点数BooleanField      复选框,值为True或者FalseRadioField        一组单选框SelectField       下拉列表,需要注意一下的是choices参数确定了下拉选项,但是和HTML中的<select> 标签一样,其是一个tuple组成的列表,可以认为每个tuple的第一项是选项的真正的值,而第二项是alias。MultipleSelectField  可选多个值的下拉列表
8.2 flask-wtf的使用流程1). 编写forms.py文件, 定义一个关于表单的类;(***注意: 一定要有提交的按钮);2). 业务逻辑文件app.py中,- 实例化表单类;  form = RegisterForm()- 验证表单内容是否提交成功?   form.validate_on_submit():- 获取表单里面的内容(两种方法):- 通过request对象获取: request.form['key值'];- 通过form对象获取: form.key值.data3). 表现逻辑文件wtf.html中:- 导入wtf模块: {% import "bootstrap/wtf.html" as wtf %}- 自动生成表单对应的html:  {{ wtf.quick_form(form) }}

9. Flask中集成邮件发送

from flask_mail import Mail, Message
from flask import Flask, render_template
app = Flask(__name__)# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或者IP
app.config['MAIL_SERVER'] = '邮件服务器域名或IP'
# 指定端口, 默认25, 但qq邮箱默认端口号为465或587;
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = '发送者邮箱名称(QQ邮箱为QQ号)'
# 此处的密码并非邮箱登录密码, 而是开启pop3
app.config['MAIL_PASSWORD'] = "个人密码"def send_mail(to, subject, info):mail = Mail(app)msg = Message(subject=subject,sender='976131979@qq.com',recipients=to,body=info)with app.app_context():mail.send(msg)send_mail(to=['976131979@qq.com', '2287236639@qq.com'], subject="邮件主题",info="邮件正文")if __name__ == '__main__':app.run()

前端(Jinja2)相关推荐

  1. Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    https://www.cnblogs.com/DragonFire/p/9259999.html 是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jin ...

  2. Flask 中内置的 Session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  3. Flask - 基础

    主要内容: 1. Flask基本概述 2. 请求相关 3. Flask中模板语言 jinja2  4. 内置Session 1. Flask 基本概述: 1.1  web框架 Django,Flask ...

  4. 第四篇 做一个用户登录之后查看学员信息的小例子

    需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: 1 fro ...

  5. mac下安装前端模板引擎Jinja2

    在mac本上安装Jinja2,搜索网上介绍的经验,都是说使用easy_install或者pip安装,比如 #sudo easy_install Jinja2  #sudo pip install Ji ...

  6. Django模板之jinja2模板和CSRF

    二.Django使用jinja2模板 2.1 jinja2介绍 Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎 ...

  7. Flask一:安装初始,return方式,Request,Jinja2,session

    一:安装和初始 1.Flask 安装 + 启动from flask import Flaskapp = Flask(__name__) # 实例化flask对象 # __name__ 多app应用,分 ...

  8. 如何查看jinja2模板的上級_如何使用Python的Flask和谷歌app Engine来构建一个web app...

    前言 如果您想在很短的时间内使用Python构建web应用程序,那么Flask是一个非常好的选择.Flask是一个小而强大的web框架.它也很容易学习和简单的代码. 在本教程中,我将向您展示如何使用A ...

  9. 【Flask】jinja2过滤器的使用

    使用情景- 遇到一个bug:在数据库中存的数据,取出到前端后自带换行,(导致js中的引号.分号直接被换到下一行),js无法正常读取数据.猜测可能是在数据录入的时候输入了什么特殊符号,但是把数据删掉重新 ...

最新文章

  1. 全球首个城市内河无人驾驶数据集发布、奥地利学者用「量子扭曲」加速强化学习 | AI日报...
  2. mysql查询不到邮件_mysql – sql查询通过电子邮件获取用户列表
  3. 插入数据类型为DateTime时为空值时,为什么SQL SERVER会自动加上1900-01-01
  4. vue源码分析:渲染篇
  5. Spring Boot配置多数据源
  6. 详解Vue中watch的高级用法
  7. arm linux 时间获取,菜鸟自学ARM:linux下编程获取系统时间和设置时间
  8. COJ1183(计算表达式的值)
  9. H.323通信协议学习总结
  10. 中概股信任危机?美证监会主席直言不要购买中概股股票
  11. Linux一个坑-安装pip更新源
  12. Visual Basic编程常见问题及解答(2)
  13. 集群服务器分析系统,集群服务器系统可扩展性的研究与实现
  14. R语言基础入门,看这里!
  15. Ubuntu更改hosts档
  16. 190331每日一句
  17. 为什么计算机上面没有桌面,请问为什么右击电脑桌面上的图标没有打开的选项,只有添加到压缩文件,双击才能进去?...
  18. 【云计算】阿里云-pyodps处理指南
  19. 经济学人精读笔记10:员工休假居然对企业有好处?
  20. python调用通达信数据_通达信数据格式及5分钟信息提取

热门文章

  1. python解方程代码_Python解方程的技巧介绍(代码示例)
  2. orale数据库的SQL查询
  3. 二分图的匹配——匈牙利算法
  4. 端午假期整理了仿天猫H5 APP项目vue.js+express+mongo
  5. 时间序列的数据分析(七):数据平稳性
  6. 数字源表LIV测试激光器方案
  7. 【WIN10】如何关闭右下角输入法的“拼”字
  8. 判断元素是否为负无穷大numpy.isneginf()
  9. java jsf_JSF----概述
  10. JXplorer 的简单使用