蓝图:
蓝图在Flask中相当于是独立的,下面是使用方法
from flask import Blueprint # 导入Flask中的蓝图Blueprint模块 sv = Blueprint("sv",__name__) # 实例化一个蓝图对象 @sv.route("/svlist") # 此处添加路由和视图函数跟在Flask对象中添加是一样的 def view_list(): return "svlist_view_list"
写好之后,如果要在flask启动文件中用到的话,需要导入
from flask import Flask from flask03.student_view import s_view # 导入写好的蓝图模块 app = Flask(__name__) app.register_blueprint(s_view.sv) # 在Flask对象中注册蓝图模块中的蓝图对象s_view中的sv app.run("0.0.0.0",5000) # 此时flask对象中没有写任何的路由和视图函数,但是可以访问到蓝图中的路由
我们可以把蓝图理解成一个没有run方法的flask对象,每个蓝图都可以为自己独立出一套templates模板文件夹,也可以独立出静态文件目录,如果不独立出来的话,则会共享项目中的
所以,蓝图中的参数也有template_folder , static_folder等
特殊装饰器:
1, before_request : 在请求进入视图函数之前
@app.befroe_request也是一个装饰器,它装饰的函数,都会在请求进入视图函数之前执行,我们最常用到的就是用它来校验登录认证
from flask import Flask from flask import request from flask import redirect from flask import session app = Flask(__name__) # type:Flask app.secret_key = "DragonFire" @app.before_request def is_login(): if request.path == "/login": return None if not session.get("user"): return redirect("/login") @app.route("/login") def login(): return "Login" @app.route("/index") def index(): return "Index" @app.route("/home") def home(): return "Login" app.run("0.0.0.0", 5000)
2, after_request : 在响应返回客户端之前执行
这个一般使用情况比较少
flask的请求响应顺序跟django的中间件是有区别的,django是一是一对应的,在哪个中间件拦截,就会在对应的中间件返回去,而flask中,如果在某一个before_request中断的话,也会走全部的after_request
我们举个例子,假如说我们写了1,2,3,三个before_request,我们用be1,be2,be3来表示三个函数
还有1,2,3,三个after_request,我们用af1,af2,af3表示,那么他们的顺序如下:
正常情况下流程:be1 - be2 - be3 - af3 - af2 - af1
异常情况下流程:be1 - af3 - af2 - af1
3, @app.errorhandler(404) # 重定义错误页面返回信息
def error404(error_info):
return 三剑客+小儿子
浙公网安备 33010602011771号