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

1.蓝图的介绍

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

  1. 不使用蓝图划分项目目录结构

  2. 使用蓝图划分小型项目目录结构

  3. 使用蓝图划分大型项目目录结构

2.蓝图的使用

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

from flask import Blueprint

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

第二步:在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')

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

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



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

二、介绍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'



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

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)

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

Flask框架使用蓝图划分目录、g对象、使用数据库连接池链接数据库的更多相关文章

  1. 六十九:flask上下文之线程隔离的g对象的使用

    保存全局对象的g对象g对象是在整个flask应用运行期间都是可以使用的,并且也是和request一样,是线程隔离的,这个对象是专门用来存放开发者自己定义的一些数据,方便在整个flask程序中都可以使用 ...

  2. 基于Flask框架搭建视频网站的学习日志(六)之数据库

    使用Flask-SQLSlchemy管理数据库(1)--初步安装调试 一.介绍: Flask-SQLSlchemy是一个Flask扩展,简化了Flask中对sql的操作,是一个高层的框架,可以避免直接 ...

  3. flask框架下的jinja2模板引擎(1)(模板渲染)

    #转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...

  4. Python-S9-Day116——Flask框架相关

    01 内容回顾 02 Flask框架:路由和视图(一) 03 Flask框架:路由和视图(二) 04 Flask框架:路由和视图(三) 05 Flask框架:路由和视图(四) 06 Flask框架:s ...

  5. flask框架(七)——蓝图、请求上下文、g对象、信号、flask_session

    蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app ...

  6. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  7. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  8. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

  9. 中间件、蓝图、g对象

    中间件 ''' flask中一旦请求到来,要执行app()--->>>执行的是app.__call__,整个flask的入口 ''' from flask import Flask ...

  10. 请求扩展、蓝图、g对象

    今日内容概要 请求扩展 蓝图 g对象 内容详细 1.请求扩展 # 在请求来了,请求走了,可以做一些校验和拦截,通过装饰器来实现 7 个 # 1 before_request 类比django中间件中的 ...

随机推荐

  1. maven资源导出问题

    <!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> < ...

  2. Charles 抓取 HTTPS 协议内容,需要做什么操作?

    抓取 HTTPS 需要安装证书,Charles 端需要安装 Android.iOS手机端也需要安装 电脑的 Charles 操作:1.proxy - proxy setting - http prox ...

  3. JS变量之间赋值,修改变量值,原变量会随之改变的问题

    现象: 开发vue项目的过程中,需要多次用到一份基础数据,为减少代码量,提高一下复用效果,便用变量A来定义,在项目中需要用到时就用变量A进行赋值. 在项目中调用时,我新定义一个变量B,再将变量A赋值给 ...

  4. vue3.0+vite+ts项目搭建--初始化项目

    使用yarn yarn create vite 使用pnpm pnpx create-vite(pnpm create vite + 项目名) 根据提示输入项目名称,选择vue框架,选择vue-ts, ...

  5. android系统上编写、运行C#代码

    最近找到个好玩的APP,C#Shell (Compiler REPL),可以在安卓系统上编写和运行C#代码,配合sqlite数据库,写了个小爬虫,运行还不错: 运行一些小爬虫或者定时任务可以用这个,毕 ...

  6. mysql创建函数时提示1418。可选关闭二进制日志或者设置log_bin_trust_function_creators=1

    报错详情如下:1418--This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration a ...

  7. Codeforces Round #803 (Div. 2) A-D 刚vp完还没补题

    Codeforces Round #803 (Div. 2) 2022/7/24 上午VP 传送门:https://codeforces.com/contest/1698 A. XOR Mixup 随 ...

  8. 泛型 ? extends E ? super E的区别

    package cn.itcast.generic; import java.util.ArrayList;import java.util.Collection; public class Supp ...

  9. 编译GO报错:cgo: C compiler

    cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH ...

  10. ssh反向代理树莓派+motion,实现公网远程视频监控

    注意:本文公网远程监控部分需要借助有公网IP的云服务器进行ssh反向代理. 一.借助motion实现内网的视频监控 准备 插上摄像头,然后输入ls /dev/video*命令检查是否识别了摄像头 安装 ...