蓝图使用
中大型项目推进使用蓝图来构建文件目录
1.导入蓝图类 from flask import Blueprint
2.实例化得到蓝图对象 order_bp = Blueprint('order', name)
3.在app中注册蓝图 app.register_blueprint(order_bp)
4.在不同的views.py 使用蓝图注册路由 @order_bp.route('/order')
目录结构
flaskProject 项目名
-src 核心文件
-__init__.py 包(注册蓝图)
-static 放静态资源
-templates 存放html页面
-userpage.html
-views 放视图函数
-order.py
-user.py
-models.py 表模型 数据库代码
manage.py 启动文件
settings.py
src--init.py
from flask import Flask
app = Flask(__name__)
app.debug = True
app.secret_key = '123@@!@#!sdasd1@#!sdxcc'
from .views import user, order
app.register_blueprint(user.user_bp)
app.register_blueprint(order.order_bp)
# 注册蓝图
views文件夹----order.py
from flask import Blueprint
order_bp = Blueprint('user', __name__,
template_folder='templates',static_folder='static')
# 参数解析:template_folder 指template文件的地址,如果是跟views同一级别可直接填写,static_folder地址同级别直接填写即可
# 生成一个order的蓝图
@order_bp.before_request
# 使用蓝图的扩展器(中间件)
def before():
print('111')
# 注册路由
@order_bp.route('/order')
def order():
return 'order'
@order_bp.route('/list')
def list():
return 'order_list'
manage.py
# 项目启动文件
from src import app
if __name__ == '__main__':
app.run()
g对象
g对象在整个请求的全局 可以放值 可以取值
from flask import Flask, g,
# 通过导入模块使用
# 可以理解为是一个存储数据的空白字典,可以直接往里面放数据
# 可以在其他函数中取出来
# 取值 get 删除pop 设置默认值setdefault操作
order_bp = Blueprint('order', __name__,)
@order_bp.before_request
def before():
g.name = 'moon'
@order_bp.route('/order')
def order():
print(g.pop('name'))
return 'order'
@order_bp.route('/list')
def list():
print(g.get('name'))
return 'order_list'
链接mysql数据库
from flask import Blueprint, render_template,jsonify
import pymysql
user_bp = Blueprint('user', __name__, template_folder='templates', static_folder='static')
@user_bp.route('/mysql')
def mysql():
conn = pymysql.connect(
user='moongod',
password="123",
host='127.0.0.1',
database='FlowProps',
port=3306,
charset="utf8",
)
# 创建mysql链接
curser = conn.cursor(pymysql.cursors.DictCursor)
# 指定生成字典类型数据
curser.execute('select * from app_props limit 2')
# 执行sql语句
res = curser.fetchall()
# 拿回所有结果
print(res)
cursor.close()
conn.close()
return jsonify(res)
@user_bp.route('/user')
def userinfo():
return render_template('userpage.html', name='moon')
使用mysql链接池
创建一个数据库连接池
创建一个全局的池子
每次进入视图函数 从池中取一个连接使用 这样可以控制连接mysql连接数量过大
1. 安装 pip install dbutils
2. 使用:实例化得到一个池对象
3. 单独找个文件编写
from dbutils.pooled_db import PooledDB
import pymysql
POOL = PooledDB(
creator=pymysql, # 使用链接数据库的模块
maxconnections=10, # 连接池允许的最大连接数,0和None表示不限制连接数
mincached=3, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
maxcached=5, # 链接池中最多闲置的链接,0和None不限制
maxshared=3,
# 链接池中最多共享的链接数量
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
maxusage=10, # 一个链接最多被重复使用的次数,None表示无限制
setsession=[],
ping=0,
# ping MySQL服务端,检查是否服务可用。
host='127.0.0.1',
port=3306,
user='moongod',
password='123',
database='FlowProps',
charset='utf8'
)
4.导入到视图函数使用
from src.pool import POOL
user_bp = Blueprint('user', __name__, template_folder='templates', static_folder='static')
@user_bp.route('/mysql')
def mysql():
conn = POOL.connection()
curser = conn.cursor(pymysql.cursors.DictCursor)
curser.execute('select * from app_props limit 2')
res = curser.fetchall()
curser.close()
conn.close()
return jsonify(res)
哪个视图函数 需要 连接mysql 导过来连接即可
# 查看数据库连接数 sql语句
show status like 'Threads%'
压力测试
# 压力测试代码
from threading import Thread
import requests
def task():
res = requests.get('http://127.0.0.1:5000/article_pool')
print(len(res.text))
if __name__ == '__main__':
for i in range(500):
t = Thread(target=task)
t.start()
## 效果是:
使用池的连接数明显小
不使用池连接数明显很大
标签:__,name,flask,数据库,蓝图,bp,user,import,order
From: https://www.cnblogs.com/moongodnnn/p/17289930.html