首页 > 数据库 >flask蓝图/G对象/连接数据库/

flask蓝图/G对象/连接数据库/

时间:2023-04-05 17:36:17浏览次数:42  
标签:__ name flask 数据库 蓝图 bp user import order

蓝图使用

中大型项目推进使用蓝图来构建文件目录

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

相关文章

  • Scrapy爬虫框架 -- Mysql数据库存储数据
    一、新建一个项目scrapystartprojectmyslqst二、进入到项目目录并增加爬虫文件xiaohuacd.\myslqst\scrapygenspiderxiaohuawww.xxx.com三、修改配置文件,并开启管道存储ROBOTSTXT_OBEY=FalseLOG_LEVEL='ERROR'USER_AGENT="Mozilla/5.0(WindowsNT10.0;Win64;x64)......
  • UE5 修复 C++ 代码里的中文在蓝图中显示为乱码的问题
    1.打开VS2019,依次点击扩展->管理扩展,搜索“UTF8”,安装后源码文件会强制保存为UTF-8。注:可能需要重新保存一下,但是只要保存文件的动作生效就会自动检测-转换编码。 2.使用示例    ......
  • python flask 框架后端如何获取前端的表单数据 文本 单选框 多选框
    文本pyhon后端用request.values.get("name")去获取  if request.method == "POST":        username = request.values.get("username")     sex = request.values.get("sex") 二、多选按钮checkbox  <......
  • INFS3200 先进数据库系统
    INFS3200AdvancedDatabaseSystemsPrac2:DataWarehousing(5%)Semester1,2023Duetime:4:00pm,Friday,21April2023(Week8)Submission:Submityourworkonline(INFS3200CourseWebsite)1.Introduction1.1LearningobjectivesLearnhowtocreateacubean......
  • Linux安装mysql数据库
    1.下载路径:https://dev.mysql.com/downloads/2.上传解压#tar-xvfMySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar3.安装#rpm-ivhMySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm--nodeps#rpm-ivhMySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm--no......
  • Redis 数据库的哨兵模式
    1.哨兵模式1.1哨兵模式的结构和作用哨兵(Sentinel)是Redis官方提供的一种高可用方案,它可以监控多个Redis服务实例的运行情况。本质上,Sentinel也是一个运行在特殊模式下的Redis服务器。主从复制模式下,一般会配置多个Sentinel节点,通过互相协作来实现系统的高可用。......
  • Redis 数据库的主从复制
    1.主从复制1.1什么是主从复制主从复制,是将多台数据库服务器分为主节点(master)和从节点(slaver),主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相同的数据。 1.2主从复制的作用有了主从复制,数据可以有多份副本,这就带来了很多好处:(1)提升......
  • Docker 下 Redis 数据库的持久化
    1、Docker容器的数据卷Docker是将系统与运行的环境打包成容器来运行,当容器删除后,容器里的系统自然也就没有了。但是,在实际的项目中,希望Docker容器产生的数据能够持久化,同时容器之间也能够共享数据。Docker提供了数据卷技术来实现这些需求。数据卷就是目录或文件,存......
  • Redis 数据库的持久化
    1、Redis持久化1.1什么是持久化持久化可以理解为数据的永久存储,就是将数据存储到一个不会丢失的地方。如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就是一种持久化。 1.2Redis的持久化Redis的数据存储在内存......
  • Redis 数据库的事务机制
    1、Redis事务机制1.1事务的定义事务是指一系列操作数据库的步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。 1.2Redis的事务同样,Redis中的事务也是一组命令的集合,至少是两个或两个以上的命令。Redis事务是一个单独的隔离操作,事务中的所有命令都会序......