【python】flask+blueprints模块化架构

来源:互联网 发布:linux删除整个文件夹 编辑:程序博客网 时间:2024/06/06 09:42

注册路由

在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器:
这里写图片描述

Blueprint 的概念

Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用与招待,Flask 可以通过Blueprint来组织URL以及处理请求

简单的 Blueprint 示例

sample.py文件

from flask import Blueprint sample = Blueprint('sample',__name__) @sample.route('/') @sample.route('/hello') def index():     return "This page is a blueprint page"

在 app 应用中注册我们的Blueprint:app.py

from flask import Flaskfrom sample import sampleapp = Flask(__name__)app.register_blueprint(sample)if __name__ == "__main__":      app.run()

上面的代码在一个名为 app 的应用中注册一个名为 sample 的Blueprint,现在我们运行这个应用,则可以通过我们在Blueprint中定义的方法来访问它并获得 This page is a blueprint page的返回结果

如果希望所有的 Blueprint 的请求都基于某一个固定的URL之后
可以在注册的时候指定其根路径的URL,比如我们想使用 http://127.0.0.1:5000/sample 这个地址来访问 sample 这个 Blueprint,刚可以使用下面这样的注册方法:

app.register_blueprint(sample,url_prefix='/sample')

模块化

关于模块化,让一个实例

├── deviceState         #设备状态信息│   ├── __init__.py│   ├── route.py        #路由│   └── views.py        #视图文件├── user                #用户功能目录│  ├──__init__.py│  ├── models.py          #用户数据库结构文件│  └── views.py           #用户视图配置文件├── config.py             #公共配置文件├── requirements.txt        #需要的安装包├── run.py               #主运行文件├── static               #静态文件目录,css,js, image等└── templates             #静态页面存放目录   ├── asset           #asset功能模块页面存放目录    │  └── index.html    ├── index.html         #首页    └── user                                └── index.html

run.py主运行文件配置

#!flask/bin/pythonfrom flask import Flaskfrom deviceState import stateapp = Flask(__name__,)app.register_blueprint(state)if __name__ == "__main__":    app.run(host='0.0.0.0', port=5000, debug=None)

deviceState 功能模块配置

  1. init.py文件配置
from flask import Blueprintstate=Blueprint('deviceState',__name__,)from deviceState import route

2.route.py文件配置

rom flask import requestfrom deviceState import state@state.route('/', methods=['GET', 'POST'])def home():    return '<h1>Home</h1>'@state.route('/signin', methods=['GET'])def signin_form():    return '''<form action="/signin" method="post">              <p><input name="username"></p>              <p><input name="password" type="password"></p>              <p><button type="submit">Sign In</button></p>              </form>'''
原创粉丝点击