参考:flask官网
这边其实也是在阅读公司的python-web项目的时候,做了一点小小的重构,之前的程序只有一个index.py文件,所有的接口基本都杂糅在里面
这边的重构处理,做了层次的改变,引入了flask的BluePrint,也遇到了很多没引入BluePrint时候的问题。这边会给出问题和解决方案
1、目录结构
可以看到,其实这边也是根据flask官网的介绍,去做了这样一个结构的划分,分模块这种东西其实是见仁见智的。
2、启动方法
我们这边主要的启动函数就是main,因为引入了flask,所以可以通过创建一个Flask对象来轻松的进行程序的启动,端口监听等,关于Flask的安装可以参考:flask安装,在windows下面安装相对来说简单很多。
main函数主要做了几个事情呢,包括我们看到的坑,来看一下main函数:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/3/20 15:59
# @Author : huangzj
# @Description 把之前index的启动添加到main中
from flask import Flask
from flaskr.route import register_blue_print
def init_db_conf():
//.....机密省略
return 0
😡 # 这边我们改变了层级结构,template_folder默认是去查找templates目录的,这边改成外层的templates目录
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.jinja_env.auto_reload = True
😍 register_blue_print(app)
a = init_db_conf()
if __name__ == '__main__':
app.run(
host='127.0.0.1',
port=8083,
debug=True
)
我们看到这边有两个表情的地方就是比较重要的我们需要关注的地方:
- 😡 这个地方,我们可以看到是初始化一个Flask对象,并且设置了他的两个属性,为什么呢?因为我们的目录层级发生了改变,main.py和之前的位置有所区别,static和template相对它位置也变化了,所以我们这边重新设置了他们的位置
- template_folder:templates的相对路径(相对当前初始化文件)
- static_folder:static的相对路径(相对当前的初始化文件)
然后我们来看一下😍这个地方,是注册了我们声明的蓝图,后面一个文章中会有介绍,这边就不多说废话了
3、循环引用
可以参考:flask解决循环引用
其实循环引用这个问题其实不是很大,不知道为什么go和python不支持循环引用,有的说好像是因为初始化效率的考虑,这一点感觉java这个做的还是比较细节的。
什么是循环引用,就当前这个应用,用一张图来说名问题,其实如果程序规划到位的话,正常是不会出现循环引用的问题,但是这边的话,我也没想到更好的规划方式,先这样把.
话不多说,上面文章所说的解决循环引用的方法,大致可以参考,这边采用最简单的方式,就是在def函数的时候,在函数中做import来处理,破坏循环引用。
4、引入蓝图
参考我的另一个文章:python-web框架flask:引入蓝图和遇到的问题