flask项目 Day 2

1.集成日志到项目

日志是python自带的模块logging
应该区分上线日志,开发日志,配置不同的日志等级

打印日志:
logging.debug(‘测试debug’)

日志参数:

2.抽取蓝图目录

manage是程序启动入口,只关心启动的相关参数及内容,不关心业务逻辑,视图函数,配置,静态文件,数据库模型

创建个modules包里面放各个包,是各个视图应用

3.Global Redis

在项目结构稍稍复杂的时候导包形成了导入闭环未定义包就会Bug,解决办法就是调整包的位置,哪里用到包再导,不要写在程序的开头

给变量加智能提示类型标示:#type:StrictRedis

4.数据库设计

startUML 数据库设计
分析主表 分析子表

Sqlalchemy 模型编写 执行数据库迁移

5.静态文件导入

实例化app对象会指定默认的静态文件夹,分配访问静态文件的路由

6.根路径模版渲染

区分静态文件和模版,模版中数据是可以交互的,静态是数据不变的

在pycharm中拖动改变静态文件到模版目录,静态文件的关联路径可以自动改变

加载ico的图标~

每个网站自动请求/favicon.ico作为站点小图标
所以定义一个路由加载这个就OK

current_app.send_static_file(‘new/favicon.ico’)
系统就是这样调用这个方法,访问静态文件
current_app是后台向前台传递一些数据的工具

断点调试 send_static_file

7.图片验证码的生成流程

分析图片验证码交互流程:
后台py文件生成验证码图片 存在一个异步问题,get请求后端,后端生成验证码文字和验证码图片
,保存验证码文字内容到redis,浏览器会生成一个随机值,把随机值当key,验证码内容当value保存在Redis里;或者可以用另一个办法,随机生成一个值,用cookie传给前端,这个随机值也当作key存在redis里,之后,前端再请求,也会带着这个随机值,可以进行比对工作;这就是之前讲过的状态维持

将验证码图片返回给浏览器,浏览器收到响应展示图片,

post发送输入的验证码给后端保存的验证码文字比对,两次是不同的请求,无法比对,下面就是解决办法

为什么不用session保存value?因为比较慢

流程:
浏览器发起图片请求 /image_code?imageCodeId = xxx 随机ID
后端有视图函数接受请求
取得随机ID,生成图片验证码,保存kv到redis
返回图片给前端

前端js生成uuid 唯一标志符
jq找到相应位置img标签,将其src拼接上uuid,写上后,img就会自己发起get请求,请求图片

后端,取到发送过来的参数,判断参数是否有值,生成图片验证码,保存图片验证码文字内容到redis,返回验证码图片

url后加?imageCodeId 是查询字符串,从request.args.get(‘imageCodeId’,None)可以取到, 没取到就是None,如果是None就abort抛出知名错误,生成图片验证码:导入工具模块的验证码生成,
PIL pillow模块可以画图,自己研究

你可能感兴趣的:(flask,实战项目)