本篇介绍Flask相关的blueprint、DBUtils、wtforms
蓝图blueprint
- 帮助我们对目录结构进行划分,类似于django中的app
结构如下:
1 | crm |
在 __init__.py
下
1 | from flask import Flask |
在 manage.py 中
1 | from crm import create_app |
在views文件夹下的account.py下
1 | from flask import Blueprint,url_for |
在views文件夹下的user.py下
1 | from flask import Blueprint |
除了为我们实现了目录的划分,还有其它的改变:
关于before_request
- django中的process_request,只能批量。而蓝图这里就细致了,可以只在当前的蓝图对象中生效。
关于url_for
- 蓝图名.endpoit
把全局的before_request拿到外面去
1 | from flask import Flask |
数据库连接池
为什么要使用?
- 不用连接池的话,大量的开销花费在数据库的连接与关闭上,大大降低了效率。
安装
1 | pip install DBUtils |
本身没有,需要使用操作数据库的模块,如pymysql
关于数据库连接池
- maxconnections上限怎么办?
- block: True等待;False主动报错
- mincached:
- 与数据库保持的最小连接数量
conn = POOL.connection()
- 从数据库连接池中获取一个连接
conn.close()
:- 并不是真正的关闭,而是将此连接放还给连接池
代码实现
本质:类 + 单例模式
下面定义了 SQLHelper ,它封装了数据库操作的相关方法,以便之后业务功能调取。
1 | import pymysql |
1 | from flask import Blueprint,url_for,request,render_template,session,redirect |
wtforms
对用户提交的数据进行格式校验. (类似于 django form)
1 | pip install wtforms |
forms示例
1 |
|
登录示例
1 | from flask import Blueprint,url_for,request,render_template,session,redirect |
注册示例
1 |
|
钩子函数的作用:输入用户名后,查一下用户名是否存在
两种异常:
ValidationError
后续还可以认证StopValidation
当前字段的后续得校验器不会再使用了,跳到下一个字段
知识点
定义类
- 定义字段(label/validate/default/choices)
- 钩子函数
- 重写
__init__
在 init中去数据库中获取数据并赋值 self.hobby.choices = …
使用类
form = Form() , 默认只展示标签
form = Form(data={‘name’:’xx’}),显示标签 + 默认值(用于编辑)
form = Form(formdata=request.form),接收用户提交的数据,进行校验
1
2
3
4if form.validate():
form.data
else:
form.errors
今日总结
蓝图
1 | 面试题:flask蓝图和django得app有什么区别? |
DBUtils
wtforms
flask相关问题
你都用过flask相关得哪些组件?
1
2DBUtils
wtforms