请求扩展以及错误处理

目录

  • 请求扩展
  • 请求扩展之 错误处理 以及 标签与过滤器
  • 中间件(了解知识点)

请求扩展

Flask 里面的请求扩展相当于 Django 的中间件

  1. before_first_request 当项目启动后,接收到的第一个请求,就会执行 before_first_request 装饰的函数,执行顺序也是谁先注册就谁先执行
  2. before_request 请求没有经过响应函数的时候,会执行 before_request 装饰的函数,谁先注册谁先执行。只要有一个函数有返回值,后面的所有before_request都不会执行,且响应函数也不会执行。其有没有返回值都不会影响after_request的执行
  3. after_request 是再 before_request 与响应函数执行后执行。他必须接收响应参数,并且要把响应返回。执行顺序是谁先注册后执行
from  flask import Flask,request

app  = Flask(__name__)

@app.before_request
def before1():
    print("我是befor1")
    return "ok"

@app.before_request
def before2():
    print("我是befor2")

@app.after_request
def after1(response):
    print("响应后的参数",response)
    print("我是after1")
    return response

@app.after_request
def after2(response):

    print("我是after2")
    return response

@app.before_first_request
def first():
    print("我是第一次")

@app.route("/")
def index():
    print("我是响应函数")
    return "ok"

if __name__ == '__main__':

    app.run()

请求扩展之 错误处理 以及 标签与过滤器

  1. teardown_request , 一旦遇到错误就会执行,并且把错误传递给 teardown_request 装饰的函数, 没有错误也会执行,但是错误为None,他并不能处理错误,只能记录,捕获日志
  2. errorhandle 可以捕获错误,并且对错误做出响应,返回给用户,如果你要用 errorhandler 你必须指定他捕获哪种类型的错误,就必须传错误状态码,然后给返回值,返回给用户
from  flask import Flask,request,render_template

app  = Flask(__name__)

@app.teardown_request
def tear(e):
     print(e)
     print("我是teardown_request")

@app.errorhandler(500)
def error_500(e):
    print(e)
    return "我程序崩了,你下次来把"

@app.errorhandler(404)
def error_404(e):
    print(e)
    return render_template("404.html")

#相当于django中的标签。
@app.template_global()
def get_sb(a1,a2):
    return a1 + a2

#再html中的用法{{get_sb(1,2)}}

#django中的过滤器,以一个参数是你要过滤的那个值
@app.template_filter()
def get_something(a1,a2,a3,a4):
    return a1+a2+a3+a4

#再html中{{1|4,2,3}}

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

    print("我是响应函数")
    return render_template("index.html")

if __name__ == '__main__':

    app.run()

中间件(了解知识点)

##了解的知识点

from flask import Flask

app = Flask(__name__)
class MyMiddleware:
    def __init__(self,old_wsgi_app):
        self.old_wsgi_app =old_wsgi_app
    def __call__(self, environ, start_response):
        #这befor的befor
        print("开始之前")
        ret = self.old_wsgi_app(environ, start_response)
        #这是after的after
        print("结束之后")
        return ret

@app.route("/")
def index():
    return "ok"

if __name__ == '__main__':
    app.wsgi_app = MyMiddleware(app.wsgi_app)
    app.run()

原文地址:https://www.cnblogs.com/kai-/p/12525763.html

时间: 2024-10-08 01:59:42

请求扩展以及错误处理的相关文章

安装Stomp扩展时错误提示error: 'zend_class_entry' has no member named 'default_properties'

在安装stomp扩展时, 有这样的提示 error: 'zend_class_entry' has no member named 'default_properties' 交待下安装上下文, stomp 版本是 1.0.3 而最新的是 1.0.8  php 版本是5.4.x , 猜想可能是由于版本差异造成的, 因为1.0.3的 stomp 出现的年份是2010年... 于是网上搜索了一下, 文章点这 说在出错的文件中把 default_properties 改成 default_propert

第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner @wrapper def f1(): pass print(f1.__name__) # f1 续接第一篇 8.Flask之闪现 # 首先

Flask 的 请求扩展 与 中间件

Flask 的 请求扩展 与 中间件 flask 可以通过 扩展(装饰器)来实现类似于django 中间件的功能 类似于django 的中间件, 在执行视图函数之前, 之后的执行某些功能 1 @app.before_first_request 执行一次,第一次请求结束,在第一批函数执行后 就不再执行(状态改为False) @app.before_first_request def before_first_request1(): print('before_first_request1') 2

编译php扩展出现错误:Cannot find config.m4

问题描述: [[email protected] ~]# /usr/local/php/bin/phpize Cannot find config.m4. Make sure that you run '/usr/local/php/bin/phpize' in the top level source directory of the module 原因:当前目录没在扩展的目录 解决办法:进入到安装的扩展的目录,比如cd /home/cqh/tar/phpredis,然后再执行/usr/loc

F5 iRules-----http请求400/500错误时,重置

#  400/500错误重试 # #当服务返回400/500状态且当前pool中有存活的node重置http请求,并重新选择pool中的node. #直到返回正常代码或者轮询完所有存活node后,接受新的http请求 when CLIENT_ACCEPTED { set retry 0 } when HTTP_REQUEST { set http_request [HTTP::request] } when HTTP_RESPONSE { if { ([HTTP::status] starts_

(微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理

最近调试原来的微信模拟登陆时发生了"基础连接已关闭,发送时发生错误"的错误提示,原来都是好好的,只是很久没用了. 出错代码如下: ? 1 2 3 4 5 6 7 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN");///cgi-bin/loginpage?

无法完成你的itunes store 请求发生未知错误50

装上itunes登陆itunes store时遂发现"无法完成您的itunes store的请求,发生未知错误(-50)"跃入眼帘,卸载重装数次还是不见效果,难道是WIN7和itunes貌合神离?心有不甘,遂上网查询.为使遇到同样问题的朋友少走弯路,遂将方法心得转载如下,希望对大家有所帮助: 方法一:貌似是被提到得最多的,转自freshertouch 童鞋.1. 关掉itunes.2. 找到 C:\Users\Administrator\AppData\Local\Apple Comp

SpringMVC的AJAX请求报406错误

SpringMVC的AJAX请求报406错误原因有两种:1.jackson包没有引入 2.如果已经引入jackson包了还报406的错误,那么就有可能是请求的url路径是.html结尾,但是返回的数据是一个对象,这时浏览器就不知道怎么响应了,因为一般请求.html后缀的页面,返回的一般是个字符串或者页面内容,此时可以在web.xml中再配置一个拦截后缀,如*.action,web.xml可以有多个拦截后缀,请求.action的后缀,浏览器就没有这个限制了

wcf 服务器无法处理请求由于内部错误

The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on t