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模块可以画图,自己研究