当前位置: 首页 > news >正文

快速入手-搭建Flask框架封装mysql并结合业务实际情况使用

1、安装包

pip install pymysql 

pip install dbutils

2、项目目录结构,注意目录的层级

3、在flask_project文件夹里创建__init__.py

from flask import Flask, redirect, request, session
def auth():
    # 拦截器
    print("拦截器")
    # js、css、img不拦截处理
    if request.path.startswith("/static"):
        # 继续往后执行,不拦截
        return
    if request.path == "/login":
        # 继续往后执行,不拦截
        return
    user_inf = session.get("user_inf")
    if user_inf:
        return
    return redirect("/login")


def create_app():
    app = Flask(__name__)
    # session加密
    app.secret_key = "asdfae233daer2rewdfa"

    from .views import demo
    from .views import login

    app.register_blueprint(demo.do)
    app.register_blueprint(login.lg)

    app.before_request(auth)

    return app

4、在flask_project同级目录创建app.py

from flask_project import create_app

app = create_app()

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000, debug=True)

5、在utils里创建mysql的工具db.py

import pymysql
from dbutils.pooled_db import PooledDB
from pymysql import cursors

POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=5,  # 链接池中空闲链接的最大数量
    blocking=True,  # 链接池中如果没有可用连接后,是否阻塞等待
    setsession=[],  # 设置会话,开始回话前执行的命令列表。
    ping=0,
    host="127.0.0.1",
    port=3306,
    user="root",
    password="1234567890",
    database="qyd_dzfp",
    charset="utf8",
)


def fetch_one(sql, params):
    conn = POOL.connection()
    cursor = conn.cursor(cursor=cursors.DictCursor)
    cursor.execute(sql, params)
    result = cursor.fetchone()
    # 不是关闭数据库链接,将该链接交还给连接池
    cursor.close()
    conn.close()
    return result

6、在views里创建login.py

from flask import Blueprint, session
from utils import db


# 蓝图对象
lg = Blueprint("login", __name__)


@lg.route("/login", methods=["GET"])
def login():
    user_id = "1837035517405904898"
    status = "1"

    user_dict = db.fetch_one(
        "select * from sys_user where user_id = %s and status = %s",
        [user_id, status],
    )
    # print(user_dict)
    name = user_dict["realname"]
    if user_dict:
        session["user_inf"] = {
            "status": user_dict["status"],
            "realname": user_dict["realname"],
        }
        return "登录成功"
    else:
        return "用户不存在"

7、在views里创建demo.py

from flask import Blueprint, session, jsonify

# 蓝图对象
do = Blueprint("demo", __name__)


@do.route("/demo/getuser", methods=["GET"])
def getuser():
    user_inf = session.get("user_inf")
    if not user_inf:
        return jsonify({"status": 0, "msg": "用户未登录"})
    return user_inf["realname"]

8、运行项目

首次访问127.0.01:5000/demo/getuser,会跳转到登录界面,模拟自动登录成功

再次访问 127.0.01:5000/demo/getuser 

9、注意数据库的表信息,结合自身的表字段信息去修改完善。

10、部署 

参考创作中心-CSDN

相关文章:

  • 【MySQL】MySQL用户管理
  • Flask笔记
  • 在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值
  • JavaScript 注释
  • LeetCode 解题思路 6(Hot 100)
  • Nginx 配置与常用命令速查手册
  • 神经网络|(十一)|神经元和神经网络
  • Hive-01之数仓、架构、数据类型、DDL、内外部表
  • 纯c#字体处理库(FontParser) -- 轻量、极速、跨平台、具有字体子集化功能
  • 开源程序wordpress在海外品牌推广中的重要作用
  • Qt空项目代码解释
  • Redis SCAN 命令详解:安全遍历海量键的利器
  • SOA(面向服务架构)全面解析
  • 【wiki知识库】07.用户管理后端SpringBoot部分
  • 左值引用与右值引用
  • NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)
  • 对seacmsv9进行sql注入,orderby,过滤information_schema
  • 构建神经网络之常用pandas(补充中 )
  • leetcode459 重复的子字符串 周期性字符串问题 KMP算法
  • 解析AI工具库中三款 AI 图片转页面工具
  • 免费装修设计app/专业黑帽seo推广
  • 新型城镇化建设网站/怎么建个网站
  • 如何攻击织梦做的网站/seo关键词seo排名公司
  • 国内做的比较好的网站/怎样把自己的产品放到网上销售
  • 快速建设网站外链/大数据查询官网
  • 做网站要到公安局去备案么/seosem是什么职位