首页 > 代码库 > flask摘记
flask摘记
Blueprint
路由:处理URL到python函数的映射的函数,如下
1 @app.route(‘/‘) 2 def index(): 3 return ‘<h1>Hello World!</h1>‘
官方文档:why blueprint?http://flask.pocoo.org/docs/0.11/blueprints/#why-blueprints
flask web中引入blueprint的例子:
要方便在不同情况下使用不同的配置-> 在app/__init__.py中使用一个工厂函数create_app(config_name):来根据config_name创建app-> 蓝本可以创建一个休眠的路由(在工厂函数create_app()中注册以“激活”这个路由)。
例子:app/main 文件夹为蓝本文件夹,在app/main/__init__.py创建一个蓝本,代码如下
1 from flask import Blueprint 2 3 main = Blueprint(‘main‘, __name__) 4 5 from . import views, errors
Blueprint的第一个参数为我们创建的蓝本的名字。
为了避免循环导入,views, errors在末尾import,在error的开头有from . import main, ‘.‘表示同文件夹下。
如之前所述,这个蓝本必须在工厂函数中注册
1 def create_app(config_name): 2 # ... 3 from .main import main as main_blueprint 4 app.register_blueprint(main_blueprint) 5 return app
我们这里要将error和view写为蓝本,写法的细节会稍有不同
比如app/main/error.py
1 from flask import render_template 2 from . import main 3 4 @main.app_errorhandler(404) 5 def page_not_found(e): 6 return render_template(‘404.html‘), 404 7 8 @main.app_errorhandler(500) 9 def internal_server_error(e): 10 return render_template(‘500.html‘), 500
如果使用errorhandler修饰器,那么只有蓝本中的错误才能触发处理程序。要想注册程序全局的错误处理程序,必须使用app_errorhandler。
app/main/view.py
1 @main.route(‘/‘, methods=[‘GET‘, ‘POST‘]) 2 def index(): 3 form = NameForm() 4 if form.validate_on_submit(): 5 #...
6 return redirect(url_for(‘.index‘)) 7 return render_template(‘index.html‘, 8 form=form, name=session.get(‘name‘), 9 known=session.get(‘known‘, False), 10 current_time=datetime.utcnow())
1.路由定义使用蓝本提供的main.route
2.url_for()的第一个参数是路由的端点名,现在要加上一个蓝本的命名空间,写为main.index,这个main是可以省略的
further:https://exploreflask.com/en/latest/blueprints.html
flask摘记