前情回顾:写个网站吧! --Flask+Vue.js+MySQL+Docker(1)--简介
总结:后端好像也没啥要讲的
先说说使用的技术栈:
Flask,FLask-Restful,Flask-SQLalchemy, Flask-Cors, Python-dotenv, Pymysql
目录
BUG
架构
App.py
BUG
1. 第一个就是虚拟环境的问题。
因为我是使用的Pycharm, 虚拟环境之类的配置非常简单, 但是封装docker的时候我想,都是用docker了还有必要使用虚拟环境么,Pipenv自身也是有缺陷的,反而是使用pip+requirements的方法更直接点:
pip freeze >requirements.txt
pip install -r requirements.txt
有同学有质疑的话也可以交流讨论噢。
2. 接下来是服务器的问题,我们使用指令flask run运行时,因为使用了python-dotenv扩展,我们可以直接读取.env或者.flaskenv中的配置,但是生产环境中我这次使用的是gunicorn,所以在运行时无法读取.env中的配置,最后直接写在了文件中,由于我对docker的了解还不是很深,所以我不知道docker的安全性对这个包容性怎么样。
以后会寻求更好解决的方法。
3. 最后是werkzeug的0.15.5版本中出现的一个BUG,问题如下:
c:\repos\flask-examples\.venv\scripts\python.exe: Error while finding module specification
解决方法也很简单,降低一下版本就好。
werkzeug = "==0.15.4"
未来werkzeug会修复这个问题,所以这个BUG是暂时的,不用太多在意。
4. 关于pymysql,之前一个项目使用会报错,需要下载一个C的包,这次因为我部署在一个简单的docker容器,所以这个包不能在基于alpine的容器里运行。所以这次我把这个包直接删掉了,结果是并没有发生什么错误。
可能是BUG修复了?
总之还是使用:
SQLALCHEMY_DATABASE_URI = 'mysql+mysqlclient://。。。'
架构
直接上图:
由于是非常简单的CRUD业务,所以也没有过多使用一些架构,虽然flask推荐使用包(init)我也只是简单建了个文件夹就开始使用。
主要有一个简单的模型,其他的文件都放在了app.py中。
这样做的好处就是对于小项目写起来简单,嗯,就这一个好处。
所以大家还是不要学我了。。。
App.py
因为使用了扩展来解决跨域问题,所以要记得用CORS(app)。
app = Flask(__name__)
api = Api(app)
CORS(app, supports_credentials=True)
关于表单验证,这里也放一个简单的实例:
resource_fields = {'id': fields.Integer,'date': fields.String,'name': fields.String,'project': fields.String}@marshal_with(resource_fields)def get(self):project_data = Projects.query.all()return project_data
后端因为这次设计的非常简单,确实也没有使用到太多的东西,包括认证和一些flask-restful的高级功能也没有做(因为实在是懒)。
未来的事,更多的还是在Flask制作API上多学习一下,有条件开始学习一下grapgql。