首页 > 其他分享 >Flask 03

Flask 03

时间:2023-04-04 23:55:37浏览次数:43  
标签:__ 03 name Flask res app request cursor

Flask 框架03

蓝图的使用(blueprint )

作用:

平时我们在开发一个项目的时候,本就是耗费时间和精力,如果我们将所有的Flask请求方法都写在一个同一个文件下,会非常不便于我们对于代码的管理和后期功能代码的添加,这样会使得我们对代码的维护性变得困难。
	这时候我们就可以使用蓝图来解决这个问题,蓝图对于视图方法模块化、大项目协同开发过程中的一个很好的工具.

image-20230404174817637

蓝图的使用步骤:

-第一步:导入蓝图
from flask import Blueprint
-第二步:实例化得到蓝图对象
us=Blueprint('user',__name__)
-第三步:在app中注册蓝图
app.register_blueprint(us)
-第四步:在不同的views.py中使用蓝图注册路由
@us.router('/login')
-补充:蓝图可以有自己的静态文件和模板
-补充:注册蓝图时,可以使用前缀,必须以/ 开头
# 使用蓝图,划分大型项目目录  多个app,像django一样
big_blueprint  								# 项目名
   -src									# 核心文件
       -admin								# admin的app
       	-static							# 静态文件
       		-1.jpg						# 图片
       	-templates						# 模板文件目录
       		-admin_home.html			# 模板文件
       	-__init__.py					# 包
       	-models.py						# 表模型
       	-views.py						# 视图函数
       -home								# home app
       -order								# orderapp
       -__init__.py						# 包
       -settings.py						# 配置文件
   -manage.py								# 启动文件

g对象

g对象是什么?
-它是global的缩写,在python中是以个关键字,不能以关键字最为变量名
-g对象,在整个请求的全局都可以放值,可以取值
-它是一个全局变量,可以在任意的位置导入使用即可

- 它为什么不学django使用request做为上下文管理呢?
	-因为使用request,可能会造成request的数据污染,会不小心改了request的属性,但是自己不知道
    -建议使用g是因为它是空的。放入之后在当次请求中是全局优先
    
    
 # 之后想在当次的请求中,放入一些数据,在后面使用,就可以使用g对象。

g对象和session的区别?
    -g对象只针对当次请求
    -session 针对与多次请求
from flask import Flask, g, request

app = Flask(__name__)
app.debug = True


@app.before_request
def before():
    if 'home' in request.path:
        g.xx = 'xx'


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


@app.route('/')
def index():
    print(g.xx)
    name = request.args.get('name')
    # g.name = name
    request.method = name
    res = add(1, 2)
    print(res)
    return 'index'


@app.route('/home')
def home():
    print(g.xx)
    return 'index'


if __name__ == '__main__':
    app.run()

数据库链接池

# 在flask 中操作mysql
- 使用pymysql
-在视图函数中,创建pymysql的链接,进行查数据,查完返回给前端

-那么问题来了,来了一个请求,创建一个链接,请求结束,链接关闭(django就是这样)

-我们将链接对象做成全局的,在视图函数中,使用全局的链接,查询,返还给前端
- 多个人查询,会出现一个问题,(数据错乱)如下图。

image

解决方式:

-创建一个数据链接池
-创建一个全局的连接诶池
--每次进入视图函数,就从池中取一个连接使用,使用完成后放回到池中,只要控制好池的大小,就能控制mysql的链接数

# 使用第三方数据库链接池的步骤:
1.安装 pip install dbutils
2.使用:实例化得到一个池对象
3.在视图函数中导入使用
conn=pool.connection()
cursor = conn.cursor(pymysql.cursors.DictCursor)
        cursor.execute('select id,title,author_img from aritcle limit 2')
        res = cursor.fetchall()
        
        
        
        
        
 #  带池的代码
@app.route('/article_pool')
def article_pool():
    conn = pool.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute('select id,title,author_img from aritcle limit 2')
    res = cursor.fetchall()
    print(res)
    return jsonify(res)

# 不带池的代码
@app.route('/article')
def article():
    conn = pymysql.connect(user='root',
                           password="",
                           host='127.0.0.1',
                           database='cnblogs',
                           port=3306)
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    time.sleep(random.randint(1,3))
    cursor.execute('select id,title,author_img from aritcle limit 2')
    res = cursor.fetchall()
    cursor.close()
    conn.close()
    return jsonify(res)



# 压力测试代码
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()
## 效果是:
	使用池的连接数明显小
    不使用池连接数明显很大
    
查看数据库链接数指令
show status like 'Threads%'

标签:__,03,name,Flask,res,app,request,cursor
From: https://www.cnblogs.com/qiguanfusu/p/17288311.html

相关文章

  • Node.js17或更高版本中出现Error: error:0308010C:digital envelope routines::unsupp
    问题描述我在运行别人的Vue项目的时候报各种错误,提示XXX/node_modules/.bin/vue-cli-service:Permissiondenied权限不足的问题。还有一个问题就是:出现Error:error:0308010C:digitalenveloperoutines::unsupported。在网上也查看了解决办法,没有解决。(我之前在Nodejs官网安装......
  • flask_day03:蓝图的使用、g对象、数据库连接池
    目录回顾蓝图的使用不用蓝图,划分目录蓝图的使用步骤使用蓝图,划分小型项目目录使用蓝图,划分大型项目目录g对象g对象是什么?使用场景g和session有什么区别?数据库连接池flask操作mysql使用步骤回顾1.cbv的使用 写一个类继承MethodView,写get、post。。。 类属性decorators=[auth......
  • flask02
    目录面试1.数据库的三大范式2mysql有哪些索引类型,分别有什么作用3.事务的特性和隔离级别上节课回顾今日内容1cbv分析1.1源码分析2模板2.1py2.2html3请求与响应4session及源码分析4.1session的使用4.2源码的分析5闪现6请求扩展面试1.数据库的三大范式1.数据库的三......
  • flask:cbv源码分析、模板语法、请求与响应、session及源码分析、闪现(flash)、请求扩展
    目录一、cbv源码分析1.1基于类的视图写法1.2源码分析1.3分析源码,查找不传别名的时候为什么函数名会变成别名1.4flask的路由注册使用装饰器,如果写了一个登录认证装饰器,那么应该放在路由装饰器上还是下?1.5dispatch_request讲解1.6知识点总结二、模板语法2.1py2.2html三、请......
  • 【MySQL】MySQL基础03 — SQL学习 — DQL — 条件查询
    SQL学习—DQL—条件查询DQL语言学习数据查询语言(DataQueryLanguage),关键字select使用DQL前,先输入USE库名;2.条件查询语法:select`查询列表`from表名where筛选条件;分类:/*分类: 一、按条件表达式筛选 条件运算符:><=!=(<>)>=<= 二、按......
  • flask之蓝图的使用-g对象-数据库连接池
    目录flask之蓝图的使用-g对象-数据库连接池昨日内容补充今日内容详细1蓝图的使用2g对象3数据库连接池补充flask之蓝图的使用-g对象-数据库连接池昨日内容补充#session执行流程 open_session:前端写到cookie到后端后端取出cookie对应的value值解密转到session对象中后续......
  • flask框架01 flask与pythonweb框架介绍 flask快速使用 登录显示用户信息案列 配置
    今日内容详细目录今日内容详细1Flask和pythonweb框架介绍1.1flask介绍2flask快速使用3登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件4配置文件方式5路由系统5.1转换器1Flask和pythonweb框架介绍pythonweb框架的本质都一样1.同步框架......
  • 解决适用EntityFramework生成时报错“无法解析依赖项。"EntityFramework 6.4.4" 与 '
    起因:通过vs2022创建mvc项目时,执行添加“包含视图的MVC5控制器(使用EntityFramework)时   点击添加,出现错误提示   解决方法:在您的解决方案资源管理器中,右键单击引用,管理nuget包,转到“已安装”选项卡并从EntityFramework.zh-Hans,卸载您的语言包,然后在重新添加......
  • 【flask】蓝图的使用方式 g对象的使用 flask配置数据库连接池
    目录上节回顾今日内容1蓝图的使用2g对象g对象vsrequest对象3数据库连接池上节回顾全局request对象。线程会处理请求,确保线程中的数据不错乱。django_session表:#1cbv使用 -写一个类继承MethodView,写get,post。。。-类属性decorators=[auth,]可以加装饰器......
  • flask框架02 cbv分析 模板 请求与响应 session 闪现 请求拓展
    今日内容详细目录今日内容详细1cbv分析1.1源码分析2模板2.1py文件2.2html页面3请求与响应4session及源码分析4.1session的使用4.2源码分析5闪现6请求拓展1cbv分析#基于类的视图,写法fromflaskimportFlask,requestfromflask.viewsimportView,MethodView......