首页 > 数据库 >Flask框架使用蓝图划分目录、g对象、使用数据库连接池链接数据库

Flask框架使用蓝图划分目录、g对象、使用数据库连接池链接数据库

时间:2023-04-04 18:13:27浏览次数:39  
标签:Flask 数据库 蓝图 flask 使用 import 目录 连接池

目录

一、使用蓝图划分项目目录

1.蓝图的介绍

flask框架的目录结构没有很大的强制性,可以随意根据自己的喜好来搭建项目目录。也就是说flask框架的可塑造型非常强。当然有第三方模块来实现划分目录。当然其实可以不用蓝图也能划分目录。app对象在全局在用,因此导来导去一定会出现循环导入问题,因此使用蓝图来划分目录就可以解决该问题。以下三张图是三种划分目录的效果图,那么接下来研究一下使用蓝图具体实现划分目录吧

  1. 不使用蓝图划分项目目录结构
    image
  2. 使用蓝图划分小型项目目录结构
    image
  3. 使用蓝图划分大型项目目录结构
    image

2.蓝图的使用

第一步:在app包的双下init.py文件导入蓝图类并得到实例化对象

from flask import Blueprint

admin_bp = Blueprint('admin', __name__, static_folder='static', template_folder='templates')
from . import views  # 这个导入语句不能放到最上面,只能蓝图实例化对象下面放

image

第二步:在src跟目录的双下init.py文件里面注册蓝图

from flask import Flask
from .admin import admin_bp

app = Flask(__name__)
app.config.from_pyfile('settings.py')

app.register_blueprint(admin_bp, url_prefix='/admin')

image

第三步:在不同的views.py 使用蓝图注册路由

from flask import render_template
from . import admin_bp


@admin_bp.route('/home')
def home():
    return render_template('Admin.html')

image
最后可以正常访问路由,说明使用蓝图划分目录成功了
image

二、介绍flask框架的g对象

1. g对象是什么?

global的缩写,在python中是个关键字,不能以关键字作为变量名,干脆用了g;g对象,在整个请求的全局,可以放值,可以取值全局变量,在任意位置导入使用即可。

  • 那么它为什么不学django使用request作为上下文?
    因为使用request,可能会造成request数据的污染,不小心改了request的属性,但你不知道建议使用g 是空的,放入之后在当次请求中全局优先,以后想在当次请求中,放入一些数据,后面使用,就可以使用g对象。
  • g和session有什么区别?
    g 是只针对于当次请求
    session针对于多次请求

2. 使用代码再次解释g对象

from flask import g
from . import home_bp


def add(a, b):
    print('---', g.name)
    return a + b


@home_bp.route('/use_g')
def use_g():
    g.name = 'lll'
    res = add(1, 2)
    print(res)
    return '魔鬼变量g'

image
image

三、使用数据库连接池链接数据库

1. 引入数据库连接池的概念

flask操作mysql使用pymysql,在视图函数中创建pymysql的连接,查数据,查完,返回给前端有什么问题? 来一个请求,创建一个连接,请求结束,连接关闭(djanog就是这么做的)把连接对象,做成全局的,在视图函数中,使用全局的连接,查询,返回给前端有什么问题?会出现数据错乱。解决上面的两个问题,数据库连接池、创建一个全局的池、每次进入视图函数,从池中取一个连接使用,使用完放回到池中,只要控制池的大小,就能控制mysql连接数。

2. 在flask框架中使用数据库连接池的步骤

第一步:安装第三方模块

pip install dbutils

第二步:实例化得到一个池对象

from dbutils.pooled_db import PooledDB
import pymysql

pool = PooledDB(
    creator=pymysql,
    maxconnections=10,
    mincached=2,
    maxcached=5,
    maxshared=3,
    blocking=True,
    maxusage=None,
    setsession=[],
    ping=0,
    host='127.0.0.1',
    port=3306,
    user='luffy',
    password='Luffy123?',
    database='luffy',
    charset='utf8'
)

第三步:在视图函数中导入使用

import pymysql
from flask import jsonify
from . import user_bp
from . import POOL


@user_bp.route('/list')
def list_info():
    conn = POOL.pool.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute('SELECT orders,title,image,link,info FROM luffy_banner')
    res = cursor.fetchall()
    return jsonify(res)

最后使用数据库连接池的方式查询数据库成功了
image

标签:Flask,数据库,蓝图,flask,使用,import,目录,连接池
From: https://www.cnblogs.com/almira998/p/17287273.html

相关文章

  • Python——Flask相关原理
    摘要主要是介绍的Flask的原理和实现。主要是的在python的开发中常用Flask的框架。本博文对Flask的原理和应用进行详细的学习和介绍。FlaskFlask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAIchemy),都需要用第三方的扩......
  • SQL Server 数据库T-SQL编程
    1、T-SQL编程通过SQL语句来完成业务的处理,执行编写好的sql语句,就可以完成业务处理。2、局部变量SQLserver中变量分为:局部变量和全局变量。全局变量,在全局可用,系统自定义,用户不可以定义全局变量,用不不可以修改全局变量,全局变量以“@@”开头局部变量就是一个能够拥有......
  • flask-day3——蓝图的使用、g对象、数据库连接池
    目录一、蓝图(blueprint)1、蓝图介绍2、蓝图的使用3、使用蓝图,划分小型项目目录4、使用蓝图,划分大型项目目录5、其他知识点二、g对象三、数据库连接池四、作业1、什么是gil锁,有什么作用2、python的垃圾回收机制是什么样的3、解释为什么计算密集型用多进程,io密集型用多线程一、蓝图......
  • 【Spring】链接数据库
    添加Maven依赖:<!--spring-jdbc包--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version>......
  • flask:Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件
    目录一、Flask和pythonweb框架介绍1.1pythonweb框架介绍1.2flask介绍1.3wsgiref1.4用wsgirf和werkzeug写web二、flask快速使用三、登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件3.5知识点总结四、配置文件的使用方式1、设置方式一(测试中使用的......
  • 蓝图与数据连接池
    蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py文件中写flask,后期肯定要划分目录不用蓝图划分目录 no_blueprint_flask#项目名src#核心源码位置__init__.py#包里面实例化得到了app对象,models.p......
  • flask数据库连接
    flask数据库连接flask连接数据库flask连接数据库需要借助pymysql模块,相当于一个mysql的客户端连接。那么问题来了,我们应该按照什么策略去连接数据库?来一个请求连一次,请求处理完后断开数据库连接当并发量过高时,会有数据库服务端无法处理的隐患且每次请求都重新连接数据库一......
  • 基于mnist手写数字数据库的深度学习网络训练和数字识别matlab仿真
    1.算法描述        MNIST数据集(MixedNationalInstituteofStandardsandTechnologydatabase)是美国国家标准与技术研究院收集整理的大型手写数字数据库,该数据集包含60000 个于训练的样本和10000 个于测试的样本,图像是固定⼤小(28x28像素),每个像素的值为......
  • web出现rs查询结果为null,但数据库里的确存在数据
       执行语句,传过来用户名与密码,可rs查询不到结果,而数据库中的确存在该条数据  按住admin发现它前面有一个空格,将空格删除可行。 发现自己书写习惯,在出现(Default)后习惯按个空格再输入,导致四个数据都前面有空格,在前端一个都没有查到。 ......
  • flask框架03 蓝图的使用 g对象 数据库连接池
    今日内容目录今日内容1蓝图的使用2g对象3数据库连接池1蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__i......