Flask之蓝图
一、什么是蓝图
蓝图的基本设想是它们记录注册到一个应用时的操作执行情况。 当从一个端点到另一端分发请求和生成 URL 时,Flask 关联视图函数和蓝图。也就是随着我们开发程序越来越大,将代码进行模块化管理。我们之前可能是将所有代码都写在一个py文件,例如:
from flask import Flask app = Flask(__name__) @app.route('/home') def home(): return "home" @app.route('/login') def login(): return "login" if __name__ == '__main__': app.run()
随着功能越来越多,功能之间也需要进行区分,此时我们可以将同一功能的模块写在一个py文件,这样可以将这一个py文件当作一个蓝图,然后每一个蓝图注册到app中就可以了。
二、简单项目结构设计
I:. │ run.py │ ├─.idea │ │ encodings.xml │ │ flaskPro.iml │ │ misc.xml │ │ modules.xml │ │ workspace.xml │ │ │ └─inspectionProfiles │ Project_Default.xml │ └─flaskPro │ __init__.py │ ├─statics │ home.css │ ├─templates │ home.html │ login.html │ ├─views │ │ account.py │ │ blogs.py │ │ │ └─__pycache__ │ account.cpython-35.pyc │ blogs.cpython-35.pyc │ └─__pycache__ __init__.cpython-35.pyc
这是flask项目flaskPro下的树形结构,可以看到主要是run.py文件和flaskPro包。
1、run.py
这是整个项目的入口文件,启动项目就从这个文件开始。
from flaskPro import app #从flaskPro 包导入app对象 if __name__ == '__main__': app.run()
2、flaskPro
run.py中的app对象就是从这个包导入的,首先就是在这个包中的__init__.py文件中:
from flask import Flask # 将Flask进行实例化,传入响应的参数,其中static_url_path是静态文件地址路径 app = Flask(__name__,template_folder='templates',static_folder='statics',static_url_path='/static') # 将所有的蓝图导入进来,相当于汇总 from .views.account import account from .views.blogs import blogs # 将所有的蓝图再注入到app中,这样进行同一,请求一旦进来,由app统一分发 app.register_blueprint(account) #不加前缀 http://127.0.0.1:5000/login app.register_blueprint(blogs,url_prefix='/blogs') #可以加入前缀,http://127.0.0.1:5000/blogs/home
可以看到在这个文件中主要做下面几件事:
- 实例化Flask对象app
- 导入所有的蓝图
- 将蓝图注入到app对象
那么,这个包中剩下的views、templates、statics目录分别是蓝图文件、模板文件、静态文件。比如,views中的blogs蓝图文件:
from flask import Blueprint from flask import render_template from flask import request blogs = Blueprint('blogs',__name__) @blogs.route('/home') def home(): return render_template('home.html')
templates文件中home.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="/static/home.css" type="text/css" rel="stylesheet"> </head> <body> <h1>home</h1> </body> </html>
这就是通过蓝图设计一个简单项目的结构。
三、复杂项目结构设计
I:. │ run.py │ ├─.idea │ │ encodings.xml │ │ flaskPro2.iml │ │ misc.xml │ │ modules.xml │ │ workspace.xml │ │ │ └─inspectionProfiles │ Project_Default.xml │ └─flaskPro2 │ __init__.py │ ├─admin │ │ views.py │ │ __init__.py │ │ │ ├─statics │ ├─templates │ └─__pycache__ │ views.cpython-35.pyc │ __init__.cpython-35.pyc │ ├─web │ │ views.py │ │ __init__.py │ │ │ ├─statics │ ├─templates │ └─__pycache__ │ views.cpython-35.pyc │ __init__.cpython-35.pyc │ └─__pycache__ __init__.cpython-35.pyc
这是flask项目flaskPro2下的树形结构,可以看到主要是run.py文件和flaskPro2包。
1、run.py
这是整个项目的入口文件,启动项目就从这个文件开始。
from flaskPro2 import app #从flaskPro2 包导入app对象
if __name__ == '__main__':
app.run()
2、flaskPro2
run.py中的app对象就是从这个包导入的,首先就是在这个包中的__init__.py文件中:
from flask import Flask from .admin import admin from .web import web app = Flask(__name__) #app对象 # 注入蓝图 app.register_blueprint(admin,url_prefix='/admin') app.register_blueprint(web,url_prefix='/web')
注意的是这里的每一个蓝图又相当于是每一个app一样。比如web蓝图,在web包的__init__.py文件中创建蓝图对象:
from flask import Blueprint web = Blueprint( 'web', __name__, template_folder='templates', static_url_path='static' ) #每一个蓝图有自己独立的模板文件夹和静态文件夹 from . import views #这里的views文件是必须导入的,否则不执行views中路由注入,会导致找不到web下的路由
在views.py文件中:
from . import web @web.route('/home') def home(): return 'home'
其余的蓝图与这个是一样的。
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。