flask划分目录

flask不使用蓝图划分目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
目录结构
flask_study
static
templates
views
__init__.py
order.py #app文件
user.py #app文件
main.py


#main.py 项目的入口
from views import app #从views导入app对象
if __name__ == '__main__':
app.run()


#__init__.py 在这里实例化app对象
from flask import Flask,url_for,redirect,views
app = Flask(__name__,template_folder='../templates')
app.debug=True

#user.py
from . import app #导入app对象
@app.route('/user_index/')
def user_index():
return '我是user接口的首页'

只有上述代码是不能执行的,因为这样子只执行了__init__的代码,但是没有将user.py中的代码执行,因此我们需要在__init__.py中将app导入

#__init__.py
from . import order
from . import user

flask蓝图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
上述代码虽然可以执行,但是容易出现循环导入的问题,因此flask官方提供了一种方法,帮助我们划分目录,这就是蓝图

使用步骤
1.实例化对象
#user.py
from flask import Blueprint
user = Blueprint('user', __name__) #第一个参数是蓝图的名称,任意写

2.在app中注册
#__init__.py
from views.user import user #将app应用中实例化的对象导入过来
app.register_blueprint(user) #注册

3.写路由
#user.py
@user.route('/user_index/')
def user_index():
return '我是user接口的首页'

4.其余知识点
1.可以指定路由进来时的前缀,添加一个url_prefix即可
app.register_blueprint(user, url_prefix='/user')
2.若app划分为一个文件夹,我们可以在这个文件夹中有自己的templates和static文件夹
web = Blueprint('web',__name__,template_folder='templates',static_folder='static')
3.蓝图对象有自己的请求扩展,你只有访问这个蓝图的路径时才会触发
web = Blueprint('web', __name__,template_folder='templates',static_folder='static')
@web.before_request
def web_request():
print('web request')
@web.after_request
def web_after(response):
print(response)
return response