Flask的特点
轻量、简洁、扩展性强
常用的扩展包:wtf、sqlalchemy、login、script、migrate、mail
创建虚拟环境:mkvirtualenv 创建虚拟环境,workon 进入虚拟环境,deactivate退出虚拟环境
删除虚拟环境:rmvirtualenv
安装依赖包:pip install -r requirements.txt
生成依赖包:pip freeze > requirements.txt
视图
Flask基本程序的实现:
1、创建应用程序实例,参数__name__的主要作用是为了确定程序所在目录
2、装饰器路由的定义和使用,可以指定请求方法
动态路由参数:语法格式:<args>
正则URL:werkzeug的routing模块实现路由访问,优化访问、限制访问
重定向:当项目文件或目录发生改变的时候,建议使用url_for()
redirect()和url_for()
redirect()接收的参数,是具体的URL
url_for()接收的视图函数名
状态码:return 'string',自定义的状态码
自定义状态码,实现前后端的数据交互,不遵循HTTP协议定义的状态码
abort函数抛出的状态码必须符合HTTP协议
errorhandler()会接收abort函数抛出的状态码,一般用来处理错误页面
状态保持:HTTP协议的无状态,cookie和session的具体描述
make_response()返回的对象可以实现cookie的设置和获取
请求上下文:request和session
request的主要作用:获取客户端和服务器交互过程中参数信息,form/data/files/args/get_json/headers
session:保存客户端和服务器交互过程中的用户信息
应用上下文:current_app和g
current_app会和程序运行一起存在,可以用来记录日志信息
g变量用来临时存储用户信息
请求钩子:会在每次客户端和服务器交互前或以后执行
after_request:在每次请求后执行,用来实现前后端数据交互格式
装饰器路由的实现:
Rule(构造具体的URL)
Map(保存不同的和URL和视图函数的映射)
MapAdapter(实现具体的URL和视图函数的绑定关系)
Flask_scripte:扩展命令行,以python 文件名.py runserver的形式启动程序
自定义IP和端口,和migrate配合实现数据库迁移
模板
模板的就是文件,渲染视图函数返回的响应数据
变量 {{ 变量 }}
语句
{% if 表达式 %}
{% endif %}
过滤器:格式化输出数据
{{ 数据 | 过滤器名称}}
过滤器可以自定义
表单WTF:Flask_wt扩展,实现表单数据的验证
密码比较、数据是否存在、验证邮箱、验证字符串长度
使用表单验证器,必须设置secret_key,验证器要验证数据,必须在表单中添加表单对象.csrf_token()
宏、继承、包含:
micro:相当于python中的函数,一般用来实现模板页面的动态功能
extends:相当于代码替换,一般用来实现页面中固定不变的部分,比如顶部菜单等
include:真正实现页面的复用,一般用来实现重复页面的功能
继承的使用注意事项:
模板不支持多继承,继承的语句结束要指定结束的语句块标记
Flask中的特殊变量和方法:在视图和模板中都可以使用
request、url_for()、config、flash消息闪现
数据库
Flask_sqlalchemy实现ORM抽象,不用面对具体的SQL语句
实现数据库的连接:
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@localhost/dbs'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True追踪数据库的修改行为,如未设置不会报错,会同时警告信息
创建数据库实例:db = SQLALchemy()
定义模型类:
需要继承自db.Model
定义字段需要使用db.Column()方法
backref反向引用实现一对多或多对一的查询
基本的查询语句:
get接收id值
filter_by(id=user_id).first()使用精确查询,需要加上查询执行器
filter模糊查询,order_by排序
paginate分页操作
in_/notin_/and/
数据库迁移:Flask_migrate
python 文件名.py db init 创建迁移文件
python 文件名.py db migrate 创建迁移脚本
python 文件名.py db ungrade 更新数据表
python 文件名.py db downgrade 回退数据表
回退数据库前建议使用history命令查看历史版本号
Flask_mail:发送邮件
邮件服务器、端口、传输协议、邮箱名、授权码
蓝图、测试、部署
蓝图:模块化应用,主要用来实现不同文件中的视图函数和路由之间的绑定
创建蓝图对象:api = Blueprint('api',__name__),第一个api是蓝图对象,第二个api是蓝图名称;
使用蓝图路由
注册蓝图路由到应用程序实例上
测试:验证预期结果和实际结果之间的差距
单元测试:具体功能模块的测试,单元测试的本质是assert断言代码
实现单元测试,需要继承自unittest.casttest
单元测试代码中,测试类,必须定义两个方法:
setUP()实现测试前的准备工作,比如数据库连接,创建程序实例、模拟客户端等
tearDown()实现测试后的扫尾工作,比如清楚会话对象、删除测试数据等
测试代码必须以test开头
部署:gunicorn -w 开启的进程数 -b 绑定的IP和PORT 启动文件:应用程序实例名称