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

@app.errorhandler()

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

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

@app.before_request

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

  1. from flask import Flask
  2. from flask import request
  3. from flask import redirect
  4. from flask import session
  5. app = Flask(__name__) # type:Flask
  6. app.secret_key = "DragonFire"
  7. @app.before_request
  8. def is_login():
  9. if request.path == "/login":
  10. return None
  11. if not session.get("user"):
  12. return redirect("/login")
  13. @app.route("/login")
  14. def login():
  15. return "Login"
  16. @app.route("/index")
  17. def index():
  18. return "Index"
  19. @app.route("/home")
  20. def home():
  21. return "Login"
  22. 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)之后做出响应

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

FBV和CBV

  • FBV路由和视图

    1. @app.route("/login")
    2. def login():
  • CBV:

    1. from flask import views
    2. class Login(views.MethodView):
    3. def get(self):
    4. pass
    5. def post(self):
    6. pass
    7. app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))

Flask - 特殊装饰器 和 Flask工作结构模式(FBV, CBV)的更多相关文章

  1. python装饰器 & flask 通过装饰器 实现 单点登录验证

    首先介绍装饰器,以下是一段标注了特殊输出的代码.用于帮助理解装饰器的调用过程. import time def Decorator_one(arg1): info = "\033[1;31; ...

  2. flask类装饰器

    from flask import Flask,request,views from functools import wraps app = Flask(__name__) #自定义登录装饰器 de ...

  3. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...

  4. flask之Flask特殊装饰器

    flask_decorators.py ''' Flask中的特殊装饰器: (1)@app.before_request 请求到达视图函数之前,进行自定义操作,类似django中间件中的process ...

  5. Flask 特殊装饰器

    请求进入函数之前 before_request # -*- coding: utf-8 -*-   from flask import Flask, session, redirect, reques ...

  6. Python中的装饰器的使用及固定模式

    装饰器的使用: 在不想修改函数的调用方式,但是想给函数添加内容的功能的时候使用     为什么使用装饰器: 软件实体应该是可扩展,而不可修改的.也就是说,对扩展是开放的,而对修改是封闭的. 因此,引出 ...

  7. 添加登录装饰器的两种方式:FBV和CBV

    1.FBV方式:添加验证装饰器 def auth(func): def deco(request, *args, **kwargs): u = request.get_signed_cookie('u ...

  8. Flask特殊装饰器

    @app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...

  9. Flask蓝图Blueprint和特殊装饰器

    Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...

随机推荐

  1. 从基于 SQL 的 CURD 操作转移到基于语义 Web 的 CURD 操作

    中文名称 CURD 含义 数据库技术中的缩写词 操作对象 一般的项目开发的各种参数 作用 用于处理数据的基本原子操作     它代表创建(Create).更新(Update).读取(Retrieve) ...

  2. SoapUI在Jenkins中的配置

    Jenkins Label: windows_ws_test   已有Jenkins环境变量 %READYAPI_PRO_HOME%  - <D:\Program Files\SmartBear ...

  3. ios6--UILabel

    // // ViewController.m // 02-UILabel的使用 // // UILabel显示一段文字. #import "ViewController.h" @i ...

  4. git reset --hard 回滚以后 以后怎么再回去?

    恢复的过程很简单: 通过git log -g命令来找到需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别,找到执行reset --hard之前的那个commit对应的commitid ...

  5. PCB genesis加尾孔实现方法

    一.为什么增加尾孔呢 看一看下图在panel中增加尾孔的效果;如下图所示,主要有2点原因. 1.孔径大小测量 假设如果不增加尾孔,要检测孔径大小是否符合要求,那么QA检测会选择最后钻的孔进大小进行测量 ...

  6. eclipse的快捷键---调试

    1:查看类或接口的方法 Ctrl+T 2:debug调试查看信息 Ctrl+Shift+i 3:debug调试快捷键 (1):F11好像是重新运行debug. (2):F8直接输出结果.(3):F5单 ...

  7. 湖南集训day6

    难度:☆☆☆☆☆☆☆☆ /* 对于第一问:f[i][j]表示前i个数,当前黑板上的数为j的概率 当前有三种情况 1.当前数不是j的倍数—>黑板上的数字改变. 2.当前数是j的倍数且当前数在前i个 ...

  8. 洛谷P2668斗地主(搜索)noip2015

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  9. JavaScript入门三

    *********BOM和DOM******** JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 Java ...

  10. BZOJ 3473

    思路: CF原题 ZYF有题解 O(nlog^2n) //By SiriusRen #include <bits/stdc++.h> using namespace std; ; ]; i ...