Flask 5(新建flask项目流程梳理、model、级联数据查询、条件查询、falsk-caching)

1、新建flask项目流程梳理

1.1、新建项目

在这里插入图片描述
在这里插入图片描述

1.2、改成我们想要的样子

①修改管理文件名
在这里插入图片描述
②安装插件

安装flask_script:pip install flask_script

③修改管理文件
在这里插入图片描述
④新建python文件夹App,并写入如下内容
在这里插入图片描述
⑤修改创建方式,并添加环境变量
在这里插入图片描述
⑥初始化整个项目的配置

初始化配置前先安装pymysql:pip install  pymysql

新建一个App/settings.py,内容如下

import os

# os.path.abspath(__file__)获取当前文件的绝对路径
# os.path.dirname()获取当前路径的上一级路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# 获取数据库地址
def get_db_url(dbinfo):
    engine = dbinfo.get("ENGINE") or "sqlite"
    driver = dbinfo.get("DRIVER") or "sqlite"
    user = dbinfo.get("USER") or ""
    password = dbinfo.get("PASSWORD") or ""
    host = dbinfo.get("HOST") or ""
    port = dbinfo.get("PORT") or ""
    name = dbinfo.get("NAME") or ""

    return "{}+{}://{}:{}@{}:{}/{}".format(engine, driver, user, password, host, port, name)


class Config:
    # 开发环境
    DEBUG = False
    # 测试环境
    TESTING = False
    # 数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    SECTET_KEY = "123456789"

    SESSION_TYPE = "redis"


# 开发环境
class DevelopConfig(Config):
    DEBUG = True

    dbinfo = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "root",
        "NAME": "Flask2",
        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 测试环境
class TestConfig(Config):
    TESTING = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flask2",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 演示环境
class StagingConfig(Config):
    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flask2",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 生产环境
class ProductConfig(Config):
    DEBUG = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flask2",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


envs = {
    "develop": DevelopConfig,
    "testing": TestConfig,
    "staging": StagingConfig,
    "product": ProductConfig,
    "default": DevelopConfig
}

在App/init.py里面配置
在这里插入图片描述
⑦初始化整个项目的插件、扩展库

安装sqlachemy:pip install flask-sqlalchemy
安装migrate:pip install flask-migrate

新建一个App/ext.py,内容如下
在这里插入图片描述
在App/init.py里面配置
在这里插入图片描述
⑧新建视图App/views.py,内容如下

在这里插入图片描述
在App/init.py里面配置
在这里插入图片描述

1.3、创建数据库

登录mysql:mysql -uroot -proot;
建库:create database Flask2 charset=utf8;

在这里插入图片描述
在manage.py注册db
在这里插入图片描述

迁移

python manage.py db init

打开mysql图形化界面
在这里插入图片描述

1.4、运行

python manage.py runserver -r -d

在这里插入图片描述
在这里插入图片描述

2、model

2.1、模型里面的字段类型

在这里插入图片描述

2.2、新建一个模型

新建App/models.py
在这里插入图片描述
在视图里面声明一下(flask里面视图和路由都写在views里面,所有有时views也叫它路由)
在这里插入图片描述
迁移

python manage.py db migrate
python manage.py db upgrade

数据库里生成了对应的表
在这里插入图片描述
新建一个添加student的路由试试
在这里插入图片描述

@blue.route('/add/')
def add():
    student = Student()
    student.name = "小明%d号" % random.randrange(10000)
    db.session.add(student)
    db.session.commit()

    return '添加成功'

运行并访问
在这里插入图片描述

2.3、常用数据操作

在这里插入图片描述
同时添加几条数据实例
在这里插入图片描述
在这里插入图片描述

查询实例
在这里插入图片描述
在这里插入图片描述
删除实例
在这里插入图片描述
更新实例
在这里插入图片描述

2.4、约束

在这里插入图片描述
在这里插入图片描述

2.5、模型继承

在这里插入图片描述
迁移后
在这里插入图片描述
我们发现新增表只有animal,其他的都在animal里面
在这里插入图片描述
我们给cat和dog添加数据试试
在这里插入图片描述
重启服务器并访问
在这里插入图片描述
在这里插入图片描述
查看数据库,我们发现表里的数据是错乱的

在这里插入图片描述
解决这个问题:在父类添加–abstract–=true
在这里插入图片描述
python manage.py db downgrade降级后删掉最后生成animal表的迁移文件
在这里插入图片描述
然后重新生成迁移,执行迁移
在这里插入图片描述
在这里插入图片描述
查看数据库
在这里插入图片描述
重启服务器并访问后,数据正确添加进来了
在这里插入图片描述
在这里插入图片描述

2.6、条件查询

在这里插入图片描述
在数据库里插入一些数据
在这里插入图片描述

2.6.1、获取id大于2的,实例

.all( )返回的是一个list类型
在这里插入图片描述
实例
在这里插入图片描述
也可以直接用运算符
在这里插入图片描述

2.6.2、获取id小于5的,实例

实例
在这里插入图片描述
在这里插入图片描述

2.6.3、获取包含“猫”的,实例

在这里插入图片描述

2.6.4、筛选,实例

在这里插入图片描述
偏移、限制的实例
在这里插入图片描述
在这里插入图片描述
排序实例:排序最先执行,排序不能放在offset、limit后面
在这里插入图片描述
在这里插入图片描述

2.6.5、自己写分页查询,实例

先往数据库里插入一些数据
在这里插入图片描述
访问执行后,查看数据库
在这里插入图片描述
写分页视图
在这里插入图片描述
html
在这里插入图片描述
运行并访问
在这里插入图片描述
在这里插入图片描述

2.6.6、paginate()分页查询,实例

在这里插入图片描述
在这里插入图片描述
显示页码实例:
html
在这里插入图片描述
视图
在这里插入图片描述
运行并访问
在这里插入图片描述

2.6.7、filter_by,实例

在这里插入图片描述
在这里插入图片描述

2.7、级联查询

在这里插入图片描述
在这里插入图片描述

2.7.1、手动实现 级联查询,实例

models.py
在这里插入图片描述
迁移
在这里插入图片描述
视图(路由):级联
在这里插入图片描述
运行后访问:

添加顾客
在这里插入图片描述
添加地址
在这里插入图片描述
查看数据库
在这里插入图片描述
在这里插入图片描述
视图:获取某个顾客信息
在这里插入图片描述
获取地址
在这里插入图片描述
html
在这里插入图片描述
访问
在这里插入图片描述

2.7.2、db.relationship() 级联查询,实例

模型:添加relationship()后,视图里面就直接可以调用这个级联,添加这句话不用重新迁移,因为它不入库
在这里插入图片描述
视图
在这里插入图片描述
运行后访问
在这里插入图片描述

2.8、逻辑运算

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、项目中数据库的优化

在这里插入图片描述
连接池:优化连接的通道(和数据库对接的通道),让多余的线程等待
mysql,默认两个小时回收没有用的连接

4、flask-caching

先安装:pip install flask-caching

写入插件ext.py:
在这里插入图片描述
在视图里面加入缓存:缓存函数,存入的是return结果
在这里插入图片描述
也可以使用redis
在这里插入图片描述
启动redis
在这里插入图片描述
运行并访问
在这里插入图片描述
在这里插入图片描述

falsk-caching具体用法参考
https://www.cnblogs.com/cwp-bg/p/9687005.html
发布了136 篇原创文章 · 获赞 30 · 访问量 7093

猜你喜欢

转载自blog.csdn.net/a__int__/article/details/104408199