flask框架(四)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: flask框架(四)

flask框架(四)

1.蓝图的基本使用(掌握)

作用:为了进行模块化开发

特点:属于flask自带的,不需要安装扩展就能使用

蓝图的使用流程

1/创建蓝图对象(Blueprint)

2/使用蓝图装饰视图函数

3/将蓝图注册到app中(register_blueprint)


user_blue=Blueprint("user",__name__)

其中的user是自己起的名字,__name__是固定的


app.register_blueprint(blue)将蓝图注册到app中,相当于把blue的东西加载到了app身上

可以将不同的功能分离开来,单独放在新的py文件里面,然后导入即可.

小问题:

1/再导入模块的时候,有可能会看到自己自动导入的包和预想的是不一样的,比如说看到了下面三种情况,其实下面三种包内容是一样的,只是新旧版本不一样.之前困扰了我很久,终于解决了,现在分享给大家,希望你不会被困扰.

flask_wtf.csrf

flask.ext.wtf

flask_wtf

2.蓝图单文件使用(掌握)

例子:创建商品蓝图,用户蓝图使用

demo01-03文件

3.以包的形式使用蓝图(掌握)

工作里面很常见,项目中经常使用,要多关注.是一种蓝图使用的标准模式

作用:以包的形式管理使用蓝图,更加灵活

特点:

1/每个蓝图都可以有自己的模板文件,静态文件,配置文件等

user(创建的包)里面,__init__.py文件和views.py文件

相当于启动入口的的文件demo04package_blueprint.py


在导入的时候,从根目录包的名称开始导入,from user import xxx系统会自动把user包里面所有的文件从上到下执行一遍,找你要导入的东西.


4.循环导包(理解)

定义:两个文件之间相互引用,并且引用的格式不正确,就会导致程序运行不了

循环导包

注意点:

1/python中允许循环导入,但是导入的结构要合理


解决办法:

报错之后,看报错信息,将提示错误的所有的文件全部打开,然后将每一个文件出问题的行打断点进行调试.


Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性

1/一个应用可以具有多个Blueprint

2/在一个应用中,一个模块可以注册多次

3/Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法

4/在一个应用初始化时,就应该要注册需要使用的Blueprint

5/一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。


__inint__.py文件中要记的写导入view文件,要不然会有问题.而且位置也很重要.

5.蓝图参数含义(理解)

user_blue=Blueprint("user",__name__)

蓝图中的参数和app里面的参数差不多,相当于一个小型的app,只不过里面的好多参数定义为none,为了让用户自己定义

参数具体解释:

user表示蓝图的名字,用来标识蓝图装饰的视图函数所属的蓝图

__name__固定写法,表示的是蓝图所在包的名字

static_folder="static(在包下面可以自己建立自己的静态文件夹,这个static是自己建立的静态文件夹名字)"static_folder用来存储静态文件

url_prefix给所有使用user_blue装饰的视图函数加上一个访问前缀

template_folder表示蓝图自己的模板文件,如果app中也设置了自己的模板文件,如果文件名相同,那么优先访问app的


蓝图对象中常见的参数:

name表示蓝图的名字

import_name表示蓝图所在模块的名字,使用__name__

static_folder表示蓝图的静态文件夹

url_prefix蓝图的访问前缀

template_folder表示蓝图的模板文件


每个包都可以有自己的静态文件.

6.断言(了解)

定义:判断程序执行到某个地方的时候,是否能够达到预期的结果

使用格式:

assert boolean表达式1,异常信息

例子:assert isinstance(num1,int),"num1请输入一个整数"

执行流程:

如果表达式1为True,程序不会抛出异常信息,继续执行,

如果表达式1位False,程序抛出异常信息

使用场景:

1/单元测试

2/写一个框架

7.单元测试流程(了解)

在公司里面有专门的测试人员,我们只需要了解即可

测试分类:

1/单元测试

2/集成测试

3/系统测试

单元测试:

对独立的模块进行测试,是我们要重点关注的内容

流程:

1/定义类,继承自unittest.TestCase

继承自TestCase的类,可以直接单独运行

2/编写两个固定方法

setup:测试开始的方法(适合做初始化,比如数据库的连接,表的创建)

测试的内容在中间执行

teardown:测试结束的方法(适合做,收尾工作,比如数据库删除,会话移除)

测试方法执行的时候有个小特点:就是每次测试的时候,都会执行一下开始和结束的方法.

3/编写自己的测试方法

必须以test开头,要不然测试不了

在pycharm中测试,光标放在哪个函数的内部,就执行哪个测试的方法

8.数据库测试案例(了解)

目的:数据库添加数据是否正常

流程:

1/定义类,继承自TestCase

2/编写两个固定方法setup和teardown

3/编写添加数据的测试方法


测试的时候,不能在正式数据库里面测试,会将原来的数据库信息测试的乱七八糟的,要设置数据库的链接信息,在测试数据库中测试.测试的结果不会对原有数据库有任何影响.想要看到测试数据的话,因为测试过程很短,我们可以延迟操作,然后在测试的时候,进行查看测试数据库.


断言的时候,如果使用在函数内部,记得写self.assert

9.redis概述(理解)

nosql泛指非关系型的数据库,没有外键.不支持sql语法,存储的数据都是kv形式.

秒杀用的到redis

了解:redis是一款nosql,不支持sql语法

特点:

1/c语言编写出来的,读取速度快

2/数据存储在内存中的,但是会将内存中的快照信息保存在磁盘中

3/适合用来做缓存


打开的时候执行下面的命令:

redis-server启动服务器

redis-cli连接服务器

10.redis安装说明(了解)

最新的版本是4.0.9

redis是c语言的写的,安装的时候需要编译

.o是c语言编译完成后的文件

.c和.h是c语言的文件

具体安装不做说明

11.redis配置说明(理解)

常见的配置信息:

默认绑定的IP:127.0.0.1

默认端口:6379

daemonize默认设置为yes,守护进程,命令执行完不会阻塞,而且可以在后台运行

database默认16个,默认使用0号库,最大号库是15

slaveof用来配置主从

建议参考文档

启动的是usr/local/bin/redis-server

开启服务器之后,关闭终端,服务器不会关闭,因为设置过

12.String类型(掌握)

nil是的意思

keys 's*'中的引号去掉没关系,也是正确的(*匹配的是0到多个)

exists age存在返回1,不存在返回0

type name看name类型

expire sex 10给sex设置有效期为10秒

ttl sex查看sex的有效期,到期之后会出现-2

keys *查看所有的key

del删除key

get heihei获取heihei的值

append hahah xxixi增加一个key为hahah,值为xxixi的数据

append name 10给name的值(是个字符串)增加10,之前为'banzhang',增加之后变为'banzhang10'

setex设置有效期

mget查看多个key的值

mset设置多个键值对

flushall清空所有数据,清空的就是所有的key

ping看是否连接服务器,连接上显示pong

13.hash类型(理解)

hset key field value

hset person name laowang建立一个key为personfiled为name,值为laowang的数据

hset person age 29给key为person的数据里面添加一个filed为age,值为29的数据

hget person name取filed为name的值

hmset person sex man height 180设置多条数据

hkeys person找里面所有的filed

hdel person sex height删除

场景:做页面数据缓存

服务器叫做数据缓存,客服端叫做内存

14.list类型(了解)

lpush list 1 2 3 4从左边添加4个数据

lrange list 0 3获取上面添加的4个索引0代表的是起始索引,3代表的是结束索引

获取的时候看到的顺序是4.3.2.1,因为从左推进去,那么第二个推进去的时候,第二个从左边数变成了第一个

rpush list 8从右面推一个8

lrange list 0 -1获取的结果是43218

linsert list before 3 30给3前面加入30

linsert list after 2 200给2后面加入200

lset list 1 300将1的值变为300

lrange list 0 -1查看列表所有的值

lrem key count valuekey列表,value是值,count是前多少次,count>0从头开始数,count<0从尾部开始数,count=0 查找所有的元素

15.set类型(了解)

特点:大小关系有序,且不重复

sadd set 1 1 2 3 7 6 5 5 8添加

smembers set查看所有的值

返回的值是1235678

16.zset类型(了解)

根据权重值去排序

zadd zset 10 zhangsan 20 lisi 30 wangwu添加值,zhangsan的权重是10

zrange zset 0 -1取出所有的值

zrangebyscore zset 11 21获取权重在11到21的所有值

zscore zset wangwu获取wangwu的权重

zremrangebyscore zset 0 100删除权重在0到100的值

17.IDE操作string(掌握)

使用流程:

1/安装扩展包

pip install redis

2/导入redis类

from redis import StrictRedis

3/创建redis对象,关联ip和port

redis_store = StrictRedis(host="127.0.0.1",port=6379,decode_responses=True)

decode_responses=True的意思是将取出的数据自动解码,因为取出的数据是二进制的.

4/调用redis的相关方法

redis_store.set("name","banzhang",5)参数一name表示key,参数二banzhang表示value,参数三5代表的是key-value的有效期,单位是秒

使用的时候全用创建出来的对象进行操作

18.主从搭建(理解)

目的:主写数据,从读数据,实现读写分离

ctrl+a是Linux终端中,快速到行首

ctrl+e是Linux终端中,快速到行尾


19.集群搭建(了解)

为了应对高并发

集群的搭建分为软件层面和硬件层面.

cluster集群

slots卡槽

.rb是ruby语言的文件,也是一种脚本语言

redis-cli -h ip地址 -p 端口号


20.session指定存储位置(理解)

定义:用来存储敏感信息,存储在服务器内部

设置:session[key]=value

获取:value=session.get(get)

注意点:设置SECRET_KET

指定session存储到redis中

操作流程

1/安装flask_sess

pip install flas_session

2/导入Session;类

from flask_session import Session

3/设置session相关的配置信息到app中

4/读取app身上的配置信息(和session相关的)

Session(app)


<设置app的配置信息>

app.config["SESSION_TYPE"]="redis"指定session的存储类型

app.config["SESSION_REDIS"]=StrictRedis()指定redis服务器地址

app.config["SESSION_USE_SIGNER"]=True设置session的签名信息

app.config["PERMANENT_SESSION_LIFETIME"]=timedelta(seconds=10)设置session在redis中的存储时间

session默认有效期是31天

expires有效期


<读取配置类,加载配置信息到app中>

定义一个类Config,设置这些参数,继承自object类

app.config.from_object(Config)


21注册程序员常用的网站

  • github:  www.github.com(使用谷歌浏览器有可能会不能注册,更换ie或者win10的浏览器注册成功)
  • 码云: www.gitee.com
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
3月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
203 71
|
2月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
124 60
|
3月前
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
161 64
|
3月前
|
安全 数据安全/隐私保护 开发者
Flask框架的安全性如何?
安全是一个持续的过程,需要不断地关注和更新。随着新的安全威胁的出现和技术的发展,开发者需要及时了解并采取相应的措施来应对,以确保 Flask 应用始终处于安全的状态。
182 63
|
3月前
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
174 64
|
3月前
|
安全 网络安全 数据安全/隐私保护
Flask框架的安全机制与其他框架相比有哪些优势和劣势?
总的来说,Flask 的安全机制在灵活性和可扩展性方面有其独特优势,但也需要开发者在安全方面投入更多的精力和努力,以确保应用的安全可靠运行。
85 12
|
4月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
141 1
|
4月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
54 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
4月前
|
JSON 测试技术 数据库
Python的Flask框架
【10月更文挑战第4天】Python的Flask框架