1. 程式人生 > 其它 >17 flask之請求擴充套件

17 flask之請求擴充套件

1 before_first_request

服務一啟動,第一次請求會走,以後再也不走了

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)


@app.before_first_request
def first():
    print('我的第一次')


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


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

 

 

 

2 teardown_request

無論如何都會走,即使出了異常

注意:app.debug = False才會走

案例1:app.debug = True

  1. 未出異常
# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)
app.debug = True


@app.teardown_request
def ter(e):
    print(e)
    print('無論如何都會走,即使出了異常')


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


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


2. 出異常

 

 

 

 

案例2:app.debug = False

  1. 未出異常
# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)
app.debug = False


@app.teardown_request
def ter(e):
    print(e)
    print('無論如何都會走,即使出了異常')


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


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


 

 

 

 

2.出異常

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)
app.debug = False


@app.teardown_request
def ter(e):
    print(e)
    print('無論如何都會走,即使出了異常')


@app.route('/')
def index():
    print('index')
    a
    return 'ok'


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


 

 

 

 

3 errorhandler

  • 路徑不存在時404
  • 伺服器內部錯誤500

案例1:路徑不存在時404

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)


@app.errorhandler(404)
def error_404(arg):
    print(arg)
    return "你迷路了----》404"


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


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


 

 

 

 

案例2:伺服器內部錯誤500

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask

app = Flask(__name__)


@app.errorhandler(500)
def error_500(arg):
    print(arg)
    return "請稍後再試"


@app.route('/')
def index():
    print('index')
    a
    return 'ok'


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

 

 

 

 

4 標籤:template_global

main.py

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask, render_template

app = Flask(__name__)


@app.template_global()
def dzg(a1, a2):
    return a1 + a2


@app.route('/')
def index():
    return render_template('index.html')


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

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{dzg(1,2)}}

</body>
</html>

 

 

 

 

 

 

 

5 過濾器:template_filter

main.py

# -*- coding: utf-8 -*-
# @Time    : 2021/12/13 20:53
# @Author  : dzg

from flask import Flask, render_template

app = Flask(__name__)


@app.template_filter()
def dzg(a1, a2, a3):
    return a1 + a2 + a3


@app.route('/')
def index():
    return render_template('index.html')


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

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{1|dzg(2,3)}}

</body>
</html>

 

 

 

 

 

 

6 總結

1 重點掌握before_request和after_request,
2 注意有多個的情況,執行順序
3 before_request請求攔截後(也就是有return值),response所有都執行