一.小定义解析
1.请求勾子(hook)
作用
在访问正常视图函数的时候回顺带执行请求钩子所装饰的方法
常见的请求勾子
在处理第一个请求前执行,可以用来做初始化工作,比如:数据库的链接,表的创建
before_request
每次请求前都会执行,可以用来做: 参数校验,统计工作
after_request
每次请求之后执行,统一的设置数据的交互格式,比如:设置json格式
teardown_request
所有请求销毁之后执行,统计服务器的异常信息
2.Cookie
定义
用来记录客户端和服务器的一些交互信息,由服务器生成,存储在浏览器
设置格式
response.set_cookie(key,value,max_age),其中max_age是cookie的有效期,单位是秒,如果不设置默认就是一次浏览器会话结束
获取格式
request.cookies.get(key)
3.session
定义
用来存储客户端的敏感信息,比如:银行卡,手机号,密码等, 客户端访问,由服务器创建,存储在服务器
设置格式
session[key] = value
<1>session[key]
<2>session.get(key), 推荐使用
1. 使用session需要设置SECRET_KEY,因为sessionID(钥匙)的生成需要加密
2. sessionID是存在cookie中的,内容是存在服务器
3.context(上下文)
request:每次请求的时候,封装的是本次请求的参数内容,比如:url,methods等信息
session:第一次访问,在服务器内部给用户开辟对象空间,存储敏感信息
应用上下文
current_app:是app的一个代理对象,以后在模块化开发中需要在其他文件获取到app身上的内容的时候,可以使用
g:配合装饰器使用,在一次完整的请求中g都有效
4.Flask-Script 扩展
定义
用来通过Manager对象管理应用程序,可以通过命令方式启动程序,动态指定端口,ip
使用流程
1. 导入扩展包
pip install flask_script
2. 关联app应用程序
manager = Manager(app)
3. 命令运行
python xxx.py runserver -h IP地址 -p 端口
注意点
1.通过命令运行程序
2.可以配合flask_migrate做数据迁移
二.模版
1.jinja2
定义:flask中页面的渲染是通过jinja2实现
实现渲染的方法:jinja2中提供的是render_template('文件名',key=value)方法实现的
好处:视图函数只负责业务逻辑和数据处理(业务逻辑方面)
而模板则取到视图函数的数据结果进行展示(视图展示方面)
代码结构清晰,耦合度低
2.模版语法
取变量的值
{{ 变量名 }}
分支语句if
{% if 条件A %}
语句1
{% elif 条件B %}
语句2
{% else %}
语句3
{% endif %}
执行流程 1.判断条件A,如果为True执行语句1
2.如果条件A,为False,判断条件B, 为True,执行语句2
3.同理..
循环语句for
{% for 变量名 in 容器%}
{% endfor %}
注释
{# 中间是注释的内容 #}====>快捷键ctrl+/
3.过滤器
定义:jinja2中提供了一些自带的过滤器,可以用来过滤出需要的数据
分类:
字符串过滤器
格式
{{ 字符串 | 字符串过滤器名称 }}
分类
lower:字符串转换小写
upper:转大写
reverse:反转
safe:禁用转义
capitalize:把变量值的首字母转成大写,其余字母转小写
title:把值中的每个单词的首字母都转成大写
format:格式化输出
striptags:渲染之前把值中所有的HTML标签都删掉
列表过滤器
格式
{{ 列表 | 列表过滤器名称 }}
分类
first:第一个元素
last:最后一个元素
sum:求和
length:获取列表长度
sort:列表排序
自定义过滤器
方式
(前提是:必须导入render_template进行关联)
第一种
1. 先定义函数
2. 将函数添加到过滤器列表中
格式:
app.add_template_filter(函数名,过滤器名称)
第二种
直接使用@app.template_filter()装饰函数
4.模版代码复用
宏(macro)
定义:和python中函数很像,就是定义好了一段代码,需要的时候调用
格式:
{% macro 宏名(参数) %}
{% endmacro %}
使用场景:
对于有固定结构的表单内容,可以单独写到一个宏文件中
继承
特点:共性抽取, 代码复用,子类可以扩充独有内容
格式:
{% extends '文件名' %}
包含
特点:子模板完全拥有父类内容.
格式:
{% include '文件名' ignore missing %}
注意点:使用ignore missing的好处:ignore missing好处是模板文件名不存在不会报错
注意点
包含不能重写父类或子类的方法
5.特殊变量和函数
定义:模板中提供了一些特殊的变量,不需要传递到就可以使用
分类:
request:请求相关数据内容
config:指app对象的config属性
url_for():根据函数找路径
get_flahed_messages():用来消耗flash()中存储的数据,flash内容的存储依赖于了session所以需要设置SECRET_KEY.