python实战Flask蓝图使用的方法

Posted Java面试题精选

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实战Flask蓝图使用的方法相关的知识,希望对你有一定的参考价值。

之前我们已经通过代码了解了一些Flask基本的用法,现在出现一个问题,我们要做的功能越来越多,路由是不是都要放在启动类中呢?例如我们在不同的文件都定义了一些路由,如果想要访问他们,是不是要开启很多个不同的服务呢?


Flask中提供了蓝图,专门用作Flask的模块化。对于蓝图,可以看官方介绍,这里翻译过来的:

Flask使用蓝图的概念来制作应用程序组件和支持应用程序内部或跨应用程序的通用模式。蓝图可以大大简化大型应用程序的工作方式,并为Flask扩展提供了在应用程序上注册操作的中心手段。Blueprint对象的工作方式与Flask应用程序对象类似,但实际上它不是一个应用程序。相反,它是如何构造或扩展应用程序的蓝图。


总之,蓝图可以使我们的程序更加模块化,不同功能的路由可以放在不同的模块下,最后集中到启动类中。下面看一个例子来学习使用蓝图,以上一篇代码为基础,略微修改几处。


分路由类:

from flask import Flask, render_template, Blueprint
app = Flask(__name__)
test1 = Blueprint('test1', __name__)
@test1.route('/test')
def test():
   return render_template('test1.html')


分路由类:

#encoding:utf-8
#!/usr/bin/env python
from flask import Flask, render_template, request, redirect, url_for, session, flash, Blueprint
import sys
reload(sys)
sys.setdefaultencoding('utf8')
app = Flask(__name__)
form_test = Blueprint('form_test', __name__)
app.config['SECRET_KEY'] = 'my'
app.secret_key = 'my'
@form_test.route('/index')
def index():
   return render_template('test1.html')
@form_test.route('/login', methods=['get', 'post'])
def login():
   name = request.form.get('name')
   password = request.form.get('password')
   if name == 'admin' and password == '123':
       session['name'] = name
       return redirect(url_for('login'))
   if name != 'admin':
       flash('no this name')
   return render_template('test1.html', name=session.get('name'))


主路由启动类:

#encoding:utf-8
#!/usr/bin/env python
from flask import Flask, render_template
from test1 import test1
from form_test import form_test
from flask_script import Manager
app = Flask(__name__)
app.register_blueprint(form_test)
app.register_blueprint(test1)
@app.route('/')
def index():
   num = ['tom', 'mike', 'amuxia', 'zhao', 'lisi']
   return render_template('/index.html', num=num)
@app.errorhandler(404)
def miss(e):
   return render_template('404.html'), 404
@app.errorhandler(500)
def error(e):
   return render_template('500.html'), 500
if __name__=='__main__':
   print(app.url_map)
   app.run()


看以上代码大家应该也明白了,分路由中由form_test = Blueprint('form_test', __name__)创建蓝图,而后在主路由中通过app.register_blueprint(form_test)注入。


以上是关于python实战Flask蓝图使用的方法的主要内容,如果未能解决你的问题,请参考以下文章

python | 对 Flask 蓝图(Blueprint)的理解

Python Flask框架-开发简单博客-认证蓝图

Flask--蓝图

Flask 03

08-蓝图&单元测试

python-flask复习—— 装饰器的坑及解决办法flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件重定义错误页面)