本篇文章是我使用flask组件进行开发时遇到的诸多问题总结。在使用flask开发技术选择的时候可以参考一下。
1、flask不支持并发,如果想要在服务器上部署,那就要学习部署服务器的知识和uwsgi。
不过多解释,看源码就知道。
2、强烈推荐大家不要使用flask-login,因为真的很垃圾。太容易出bug了。
flask-login并不简单,里面的机制很复杂,使用原生flask自带的session组件,完全可以替代它,毕竟作为开源组件,flask-login还是有可能存在大bug的。
3、无论什么时候,我都强烈推荐你使用flask-sqlalchemy而不是sqlalchemy。
这两个库都用过,本质上flask-sqlalchemy是flask风格的sqlalchemy,非常好用。
4、登录判断的选择,要考虑使用session-cookie还是token。
这个自己灵活选择吧。
5、异常处理,强烈建议使用官方给出的层级异常处理。并且flask封装了很多异常处理的东西,建议根据官方文档食用。
6、如果你使用了flask-restful,那么restful会自动捕获所有的视图函数发生的所有异常,所以所有的针对app的自定义异常处理函数会失效。简单说,就是要这样写:
class MyApi(Api):
"""
自定义Api类
"""
def handle_error(self, e):
# deal with the HTTPException
if isinstance(e, HTTPException):
return jsonify({
'message': getattr(e, 'description', HTTP_STATUS_CODES.get(e.code, 'Unknown Error')),
'code': e.code
}), e.code
# deal with the python core exception
# we don't need to use "try" to catch the exception
if not getattr(e, 'message', None):
current_app.logger.error(e)
return jsonify({
'message': 'Server has encountered some errors.',
'code': 500
}), 500
# deal with the specific custom exceptions
return jsonify(**e.kwargs), e.status_code
7、考虑flask-apscheduler时,要首先知道这个库的文档非常垃圾,并且要明白,里面的JOB字段是不能改变的,也就是说,存到数据库的JOB,里面的字段不能自定义,除非修改源码。
真的是个SB库。