当我谈Flask的时候我在谈些什么
目标:使用Flask搭建一个前后端完全分离的系统
(灵感来自于企业级springboot+react)
https://developer.okta.com/blog/2018/12/20/crud-app-with-python-flask-react#define-the-python-model-schemas
技术:
前端:react
后端:flask
要注意的事项:
Flask自带的默认的服务器是单线程模式的,也就是说,如果同一时间有多个请求,那么flask自带服务器只会串行处理。
生产环境的部署
可以热部署吗?在不中断服务的情况下进行
重新发布的项目的本质就是进程的重启
gunicorn + supervisor
框架要实现的基本需求
基本签名检查
登录状态判断
解除同源策略的限制
返回一个固定格式的json格式数据
全局异常处理
mysql数据库访问
基本的分页,数据源处理,数据源切换
redis访问
oss访问
多个环境切换
生产环境部署
会用到的一些包和技术
flask
marshmallow
flask-cors
pyjwt
Flask的一些概念
from flask import g, request 中的g和request
before_request
after_request
程序上下文,请求上下文
current_app
g
request
session
路由映射
使用app.url_map可以查看映射表
模版jinja2
很重要的一个模版函数super(),当你想在父模版的基础上进行修改,同时呢又不想重新整个父模版,可以调用super()
数据库
pip install flask-sqlalchemy
flask-sqlalchemy 多条件查询的使用技巧
如何能够实现mybatis那种如果参数为空或者为null,这个条件就不算?
在使用sqlalchemy的时候可以动态的构造关键字参数字典,最后把参数字典传给filter_by
if app is not None and app != '':
tmp['app'] = app
if env is not None and env != '':
tmp['env'] = env
print(tmp)
urls = FrontUrl.query.filter_by(**tmp).order_by(FrontUrl.weight.desc())
return render_template("ql/url.html", urls=urls)
2019-03-23我忽然意识到及时回信息的重要性