一个Flask项目经验总结
问题整理
Error: While importing ‘run_app_dev’, an ImportError was raised
网上说是循环调用的问题,但这个项目在我笔记本上是可以运行的,怀疑是不是flask的版本问题,因为我直接安装了最新的flask==2.0.2,把最新的flask卸载后,安装1.1.2的flask 此问题解决。
当flask_migrate没有MigrateCommand时
出现这个情况的原因是最新的flask_migrate,已经去除了MigrateCommand,可以直接在命令行中使用,如果需要使用MigrateCommand的话:
1 | 可用 pip install flask_migrate==xx 命令 |
ModuleNotFoundError: No module named ‘Crypto’解决方案
方案一:
1 | pip3 uninstall pycryptodome |
方案二:
1 | Pip3 install pycrypto |
如何转义JSON
飞书更新的接口文档,要求卡片信息格式必须为转移后的JSON,和普通JSON的区别就是必须加转义符“\”。这个就很麻烦了。
实现方式:
1 | import json |
简单来说就是通过两次json.dumps()
来实现自动增加转义符的。
模糊查询
在模糊查询的时候经常会遇到字段不确定的情况,因此使用原生SQL更为简单,并且能结合模糊查询来实现。
1 | if request.args.get('key') and request.args.get('value'): |
单独动态查询的话也容易实现,但是模糊查询不太容易结合,只能使用下面的方式。
1 | params = {key: value} |
二次优化
将查询记录转变为非list类型的数据
1 | sql = """select * from user where %s like '%s'""" % (key, "%" + value + "%") |
增加判断条件
1 | elif isinstance(res, tuple): # 针对于模糊查询的情况 |
当为tuple类型的时候,单独处理,独立于之前的list处理模式。
flask_apscheduler 上下文的问题
最近调试apscheduler的时候出现以下的错误:
RuntimeError: Working outside of application context.
This typically means that you attempted to use functionality that needed to interface with the current application object in some way. To solve this, set up an application context with app.app_context(). See the documentation for more information.
其主要原因是由于调用到了公共变量,而flask引入了应用上下文管理,但是并没有获取到上下文导致。
解决方法:
1 | from app import scheduler |
vue 时间格式化的问题
时间格式化处理使用moment.js。
1 | npm install moment |
需要注意在格式化时间戳的时候检查是多少位,考虑是否除以1000和UTC的问题。