Flask - 特殊装饰器 和 Flask工作结构模式(FBV, CBV)

Flask - 特殊装饰器 和 Flask工作结构模式

@app.errorhandler()

作用: 重定义错误返回信息!

@app.errorhandler(404)
def error404(a):
return f"你要查看的页面,被怪兽吃了!{a}"

@app.before_request

作用: 在请求(request)进入视函数之前 进入被装饰的函数, 因此可以在请求进入视函数之前做一些操作, 比如验证session等.

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)

@app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行

request.path 是来读取当前的url地址如果是 /login 就允许直接通过 return None 你可以理解成通过放行

校验session中是否有user 如果没有的话,证明没有登录,所以毫不留情的 redirect("/login") 跳转登录页面

还有一个要提的 @app.before_first_request 它与 @app.before_request 极为相似或者说是一模一样,只不过它只会被执行一次

@app.after_request

作用: 在响应(response)之后做出响应

@app.after_request
def foot_log(environ):
if request.path != "/login":
print("有客人访问了",request.path)
return environ

FBV和CBV

  • FBV路由和视图

    @app.route("/login")
    def login():

  • CBV:

    from flask import views
    class Login(views.MethodView):
    def get(self):
    pass

    def post(self):
    pass

    app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))

posted @ 2019-03-21 21:53  孔辉  阅读(567)  评论(0)    收藏  举报