首页 > 数据库 >蓝图,flask-session,数据库连接池

蓝图,flask-session,数据库连接池

时间:2023-08-04 16:17:27浏览次数:38  
标签:蓝图 flask app py session user 连接池

1 蓝图

# blueprint :蓝图,flask都写在一个文件中,项目这样肯定不行,分目录,分包,使用蓝图划分目录


# 不用蓝图,划分目录
	-一直使用app对象,会出现循环导入问题
    -项目名
        static
        templates
            order_detail.html
        views
            __init__.py
            goods.py
            order.py
            user.py
        manage.py
        
   -代码看详情




# 使用蓝图:所有步骤
	-1 实例化得到一个蓝图对象
    	-order_blue=Blueprint('order',__name__,template_folder='../templates')
    -2 以后注册路由,写请求扩展,都使用蓝图
    	@user_blue.before_request
        @user_blue.route('/register')
    -3 在app中注册蓝图
    	from . import user
    	app.register_blueprint(user.user_blue)
        app.register_blueprint(user.user_blue,url_prefix='/user')
    	

1.1 使用蓝图

1.2 蓝图小型项目

flask_blueprint_little  #  项目名
	src                # 核心文件
        __init__.py     #包的inin里面实例化得到app对象
        views           # 视图函数,类
            user.py
            order.py
        templates       #模板
            user.html
        static         #静态文件
    
    manage.py          #启动文件


1.3 蓝图大型项目

   src
    admin
        static
        template
        __init__.py
        models.py
        views.py
    __init__.py
    pool.py
    settings.py
  manage.py

2 flask-session

# flask 自带session---》以cookie的形式放到了浏览器中---》加密

#真正的session,是在服务端存储
	-django中存在djangosession表中
    -flask中,使用第三方,保存在---》redis中---》flask-session

#flask能不能用jwt


# 使用步骤
	pip3 install flask-session
    
# 降一下flask版本即可
# 用高版本:在app中放一个参数  app.session_cookie_name='session'


# 使用方式一:
    from flask_session import RedisSessionInterface
    app.session_cookie_name='session'
    app.session_interface=RedisSessionInterface(redis=None,key_prefix='lqz')  # 动态替换,把原来的session对象换成放到redis的session对象
    # 4 以后再使用session,就会存到redis中了
    session.get()
    session[]=value赋值
    
# 使用方式二:
	from redis import Redis
    from flask_session import Session
    app.session_cookie_name = 'session'
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = Redis(host='127.0.0.1',port='6379')
    Session(app)
    
    
    
    
        @blue.route('/home')
        def home():
            session['lyx']='lyx'
            return jsonify({'code': 200, "msg": "成功"})

        @blue.route('/')
        def index():
            print(session.get('lyx'))
            return jsonify({'code': 200, "msg": "成功"})

3 数据库连接池

# flask---》数据库---》原生操作---》pymsql

3.1 数据库连接池

# 1 安装:DBUtils
# 2 使用 类创建一个池对象
PYMYSQL_POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=2,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=1,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=0,  # 链接池中最多闲置的链接,0和None不限制
    maxshared=3,
    # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
    blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='cars',
    charset='utf8'
)
# 3 从池对象中,取出一个链接使用
	conn = PYMYSQL_POOL.connection()

    
    
# 4 flask中使用
from flask import jsonify, session
from pymysql.cursors import DictCursor

from . import blue
from flask_session import Session
from ..pool import PYMYSQL_POOL
@app.route('/')
def index():
    conn = PYMYSQL_POOL.connection()  # 从池中拿一个链接
    cursor = conn.cursor(cursor=DictCursor)  # 默认元组套元组,设置DictCursor就是列表套字典
    cursor.execute('select id,title from news where id<10')
    res1 = cursor.fetchall()
    cursor.close()
    conn.close()
    return jsonify(res1)
    

标签:蓝图,flask,app,py,session,user,连接池
From: https://www.cnblogs.com/liyuanxiangls/p/17606199.html

相关文章

  • (二)flask学习
       1、flask和django的区别?1、flask轻量级,短小精悍。扩展强,有很多第三方组件,第三方组件最终构建起来也可以和django一样,可以提供很多功能。django是一个大而全,集成了很多方便组件的重武器。2、django:用户请求进来之后,对于request请求传递的,flask基于上下文管理......
  • 浅谈-HttpSession session = request.getSession(false)
    当使用request.getSession(false)方法时,如果当前请求没有关联的会话,则不会创建新的会话,而是返回null。这意味着,如果当前客户端没有携带有效的会话标识符(如JSESSIONID),或者会话已过期或被销毁,则request.getSession(false)方法将返回null。下面是一个示例来解释这个方法的用......
  • Flask快速搭建接口-python库
    Flask是一个基于Python的轻量级Web框架,用于构建Web应用程序和RESTfulAPI。它被设计为简单、易用、灵活,并且具有良好的扩展性。Flask是一个微型框架,提供了一些基本功能,但也允许开发者根据需要选择并添加扩展。Flask构成路由(Routing):Flask使用路由来定义URL和对应......
  • Oralce中processes和sessions的设置关系
    一,基本概念Sessions:指定了一个Instance中能够同时存在的sessions数量,或者说,就是能同时登陆到数据库的并发用户数。通常,我们设定这个参数时需要考虑我们可能会有多少个同时连接到数据库的并发用户,并加上后台进程的进程数,最后乘以1.1。processes:指定了Instance在OS层面所能同时运......
  • 解决Tomcat数据连接池无法释放
    近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会再次出现无法登录的情况。今天上午,开......
  • flask模拟sso
    目录[-]什么是统一用户什么是统一登录web和web之间的单点登录原理跳转方式ajax或jsonp方式统一退出统一授权检测强制退出UserAgentweb和桌面软件、移动APP之间单点登录现在大多数软件公司的业务不再是单条线,而是发展成多元化的产品线。包括多个网站应用、移动APP以及桌面软件,那......
  • flask闪现,请求扩展,g对象
    1闪现#一个请求---》假设出错了---》重定向到另一个地址---》把错误信息在另一个返回中看到错误信息放个位置----》另一个请求过来,去那个位置拿#把一些数据,放在某个位置---》后期可以去取出来----》取完不用删除,就没了defindex():s='xx错位了'returnredirect(......
  • (一)flask学习笔记
    1、flask路由(用了装饰器)@app.route('/login',methods=["GET","POST"])deflogin():pass2、路由参数@app.route('/login',methods=["GET","POST"],endpoint='login')deflogin():pass  ......
  • flask初体验和fastapi初体验
    0.flask的介绍#python界的web框架 -Django:大而全,快速开发,公司内部项目-Flask:小而精,不具备web开发好多功能,丰富的第三方插件-FastApi:异步框架,主要为了做前后端分离接口-Sanic:异步框架,只支持python3.6及以上,性能比较高-Tornado:公司用的比较少。。。1.fl......
  • Cookie + session 理解
    Http是一种无状态的应用层传输协议。可以理解成请求之间没有联系。但是很多场景,比如需要知道上次是哪个用户登录了。这时就要用到cookie和session了。一.CookieCookie是一种客户端技术,可以理解成用户信息存储在客户端。客户端第一次请求服务器时,如果需要记录用户状态,就用respon......