前记:Django的ORM、模块有很多函数细节,要学会多看文档学习函数的细节
聚合annotate()和aggregate()的使用
简言之,annotate()得到的是查询集,类似all(),只不过多了一列属性,annotate()新增的,例如统计每个出版社有多少本书(书外键到出版社),但是统计书的单价总和,用annotate()会给每个书记录加个总和属性,此时不如使用aggregate(),aggregate()可以配合Sum()等方法直接得出一个字典,里面是key-value。
当django聚合annotate或者aggregate时取出字典值。
聚合annotate()后[0]可能报错,aggreagate()的取值也可能None,if not a:a = 0,也可以.get(a,0)。
有关时间arrow的使用
基于当前取出上个月年月
import arrow
arrow.now().shift(months=-1).strftime('%Y-%m')
特殊distinct()的连用,要好好看相关的sql语句
django的values()和distinct()实现了对values()中的值去重
json交互
json数据标准字符串是双引号,平时写字符串尽量双引号
Form校验
Django的Form校验可以写校验器,一些校验的逻辑可以不写在试图函数
日志
在Python的loggin模块中,主要包含四大金刚:
Loggers:记录器
Hanglers:处理器
Filters:过滤器
Formatters:格式化器
loggins模块定义了日志级别,按时间严重程度由低到高排列,全部是大写,因为它们是常量:
级别 级别数值 使用时机 DEBUG 10 详细信息,常用于调试 INGO 20 程序正常运行过程中产生的一些信息 WARNING 30 警告用户,虽然程序还在正常工作,但有可能发生错误 ERROR 40 由于更严重的问题,程序已不能执行一些功能了 CRITICAL 50 严重错误,程序已不能继续运行
正向查询和反向查询
正向查询(通过字段),反向查询(通过表名),同样道理,***是正向代理,Nginx是反向代理