1. 使用多线程进行异步发送邮件
我们知道在Flask
中存在线程隔离,如果我们直接开启多线程的话是无法满足我们的需求的。
我们再看下current_app
和flask核心对象实例化后的区别app = Flask()
。
current_app
是使用的代理,指代的并不是flask核心对象。在之前我们知道指代的是对应的堆栈的栈顶。但是当我们在一个请求中直接新开一个线程的时候,current_app
就会出现指代为空的现象。
代理对象是收到线程id的影响的,因为本身就是在做线程隔离。
我们知道flask的核心对象是全局唯一的,如果我们要新开一个线程需要使用应用程序上下文,可以使用 current_app
的_get_current_object
方法获得真正的核心对象而不是代理对象。
下面是在发送邮件的时候使用新的线程:
1 | # 异步发送的函数 |
具有记录性的字段尽量不要做模型关联
2. 使用枚举Enum来指代一些数字
有时我们数据库的某写字段存储的是整型,标识一些状态值等。这些字段的值一般都是设置为数字,但是每个数字的含义如果不解释清楚,则很容易看不懂具体逻辑。
我们可以使用枚举来存储一些数据。
1 | class PendingStatus(Enum): |
个人觉得这种方式很不好,还不如直接在模型中增加类变量,然后增加一个元组。下面看下我平时使用的方式
1 | class Load(db.Model): |
这样配置,使用起来更简单。