蓝图Blueprint
蓝图基本使用[掌握]
- 作用: 为了进行模块化开发。每一个蓝图,都相当于一个小型app。聚合在一起,就是我们要完成的大app,即这个Web程序。
- 特点: 属于flask中自带的,不需要安装扩展就能使用
- 蓝图的使用流程:
- 1.创建蓝图对象(Blueprint)
- 2.使用蓝图装饰视图函数
- 3.将蓝图注册到app中(register_blueprint)
以单文件使用蓝图[掌握]
- 例子: 创建并使用商品蓝图、用户蓝图
以包形式使用蓝图[掌握]
- 作用: 以包的形式管理使用蓝图,更加灵活
- 特点: 每个蓝图都可以有自己的模板文件、静态文件、配置文件等
循环导包[理解]
- 定义: 两个文件之间相互引用,并且引用的格式不正确,就会导致程序运行不了
-
图解:
- 下图是因为左侧第二行代码应该放在最后一行,但现在放在了第二行,而导致的错误——两个文件相互引用而导致循环导包。
- 为什么放在最后一行不会出现循环导包现象呢:因为当进入views.py文件中执行导包语句时,再次进入__init__文件,但执行到第二行就找到了要导入的东西,这个时候虽然还是会继续执行…又进入views.py文件,然后又进入__init__文件,但是执行到第二句时,会判断出要导入的东西已经存在,于是就终止了。也就是说,python中允许循环导入, 但是导入的结构要合理。
-
注意点:如果出现了以下语句,说明代码出现了不合理的循环导包:
解决逻辑:根据错误提示,把错误中涉及到的自己写的文件打开(系统文件不用管),然后垂直分隔,自己画图分析。
蓝图参数含义[理解]
- 蓝图对象中的常见的参数
- name: 表示蓝图的名字,用来标识蓝图装饰的视图函数所属的蓝图
- import_name: 表示蓝图所在模块的名字, 固定使用__name__
- static_folder: 表示蓝图的静态文件夹(静态文件夹中存放图片、HTML、CSS、JS等文件)
- url_prefix: 蓝图的访问前缀,加上之后,所有使用该蓝图进行访问的视图函数的路由都将是
/url_prefic的值/XXX
形式的。
注意:创建的static文件夹要位于users文件夹下:
- template_folder: 表示蓝图的模板文件。如果app和users文件夹下都设置了模板文件夹,且都有users.html文件,则优先使用app下的。
断言[了解]
-
定义: 判断程序执行到某个地方的时候,是否能够达到预期的结果
-
使用格式:
- assert boolean表达式,异常信息
-
执行流程:
- 如果boolean表达式为True, 程序不会抛出异常信息,继续执行
- 如果boolean表达式为False,程序抛出异常信息
-
使用场景:
- 1.单元测试
- 2.写一个框架
单元测试
- 解释:Web程序开发过程一般包括以下几个阶段:需求分析、设计阶段、是现阶段、测试阶段。其中测试阶段通过人工或自动来运行测试某个系统的功能。
- 测试分类: 单元测试、集成测试、系统测试
- 单元测试: 由程序开发人员进行(其他测试都由专业人员来完成);对独立的模块进行测试
- 流程:
- 1.定义一个继承自unittest.TestCase的类(继承自unittest.TestCase的类可以单独运行)
- 2.编写两个固定方法
- setup: 测试开始的方法
- 适合做: 初始化, 比如,数据库的链接、表的创建
- teardown: 测试结束的方法
- 适合做: 收尾工作, 比如数据库删除、会话移除
- setup: 测试开始的方法
- 3.编写自己的测试方法
- 必须以test开头
- 光标放在哪个函数的内部,就执行哪个测试方法。如果都要测试,就放在其他任何一个地方。
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
print("setup")
def test_login(self):
print("test_login")
def test_login2(self):
print("test_login2")
def tearDown(self):
print("teardown")
数据库测试案例[了解]
- 目的: 数据库添加数据是否正常
Redis
NoSQL
- 泛指非关系型数据库
- 不支持sql语法
- 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式(key-value)
- NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
- NoSQL中的产品种类相当多,如Mongodb(爬虫相关)、Redis(下面学习)、HBase hadoop(大数据相关)、Cassandra hadoop(大数据相关)
- SQL数据库与NoSQL比较:
- 适用场景不同: SQL数据库适合用于关系特别复杂的数据库查询场景,NoSQL反之
- “事务”特性的支持:SQL对事务的支持非常完善,而NoSQL基本不支持事务
- 两者在不断地取长补短,呈现融合趋势
redis概述
- redis
- 是一款NoSQL(not only sql)
- 特点
- 1.c语言编写出来的,读取速度快
- 2.数据是存储在内存中的, 但是会将内存中的快照信息保存在磁盘中
- 应用场景
- 用来做缓存(redis中的所有数据是放在内存中的,所以存取效率更高)
- 可以在某些特定应用场景下替代传统数据库——如社交类的应用
- 在一些大型系统中,用redis巧妙地实现一些特定的功能:session共享、购物车
https://www.runoob.com/redis/redis-tutorial.html
redis下载
参考https://blog.csdn.net/weixin_43527241/article/details/88723408
redis语法知识学习
见本地资源 E:\FlaskWeb\Flask基础资料\day04\3_资料\2__redis_note_v1.0
用PyCharm操作redis
- 操作流程:
- 1.安装扩展包
pip install redis
- 2.导入redis类
from redis import StrictRedis
- 3.创建redis对象, 关联ip、port
- 4.调用redis相关的方法
- 1.安装扩展包
from redis import StrictRedis
redis_store = StrictRedis(host="127.0.0.1", port=6379)
# 增加数据
redis_store.set("name", "zjy")
右键运行,打开终端,进入redis文件夹下,输入以下命令,可以查看到python中添加的数据:
- 在cmd中查看redis的步骤:
启动redis服务器net start redis
进入redis客户端redis-cli
from redis import StrictRedis
redis_store = StrictRedis(host="127.0.0.1", port=6379)
# redis_store = StrictRedis(host="127.0.0.1", port=6379, decode_response=True)
# 增加数据
redis_store.set("name", "zjy")
# 增加数据,并设置有效期
redis_store.set("name1", "zjy1", 10) # 10s后,该条数据将消失
# 修改数据
redis_store.set("name1", "zjy11", 10)
# 获取数据
name = redis_store.get("name")
print(name.decode())
# 如果直接打印name,则输出结果是字节型,这里将其解码为字符串。
# 这样可能有些麻烦,可以通过在创建redis_store对象时传入参数decode_response=True
# 删除数据
redis_store.delete("name")
主从搭建
多个主从配起来,就是一个集群。
session指定存储位置
- 定义: 用来存储敏感信息,存储在服务器内部
- 设置: session[key] = value
- 获取: value = session.get(key)
- 注意点: 设置SECRET_KEY
- 指定session存储到redis中
- 操作流程:
- 1.安装flask_session
- pip install flask_session
- 2.导入Session类
- from flask_session import Session
- 3.设置session相关的配置信息到app中
- 4.读取app身上的配置信息(和session相关的)
- Session(app)
- 1.安装flask_session