before_first_request
:第一次請求才被調用(可用於緩存)before_request
:請求之前被調用after_request
:請求之後被調用(前面出錯就不會執行)teardown_request
:無論報不報錯都會執行
from flask import Flask
app = Flask(__name__)
# 鉤子函數
@app.before_request
def before():
print('before request!')
@app.before_request
def before():
print('before request!2')
# 第一次調用時才會被執行
@app.before_first_request
def before():
print('before first!!!')
@app.route('/index/')
def index():
# 1/0 # 如果取消這裡的注釋after_request就不會執行了
return 'index'
# 程式在不出異常才會被調用
@app.after_request
def after(response):
print('after request')
return response
@app.after_request
def after(response):
print('after request2')
return response
@app.teardown_request
def teardown(exception):
print('teardown request')
if __name__ == '__main__':
app.run()
before first!!!
before request!
before request!2
after request2
after request
teardown request
before request!
before request!2
after request2
after request
teardown request
import pymysql.cursors
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('[email protected]', 'very-secret'))
# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('[email protected]',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
import pymysql
from flask import Flask, request, g
app = Flask(__name__)
@app.before_request
def before():
# 連接資料庫
conn = pymysql.connect(host='IP位址',
port=埠 預設為3306,
user='root',
password='資料庫密碼',
database='資料庫名稱')
# 獲取游標
cursor = conn.cursor()
# g物件,這是一個全域的命名空間
g.conn = conn
g.cursor = cursor
@app.route('/sel_stu’, methods=['GET'])
def sel_stu():
if request.method == 'GET':
# 查詢所有學生資訊
sql = 'select * from student'
g.cursor.execute(sql)
data = g.cursor.fetchall()
print(data)
return '查詢成功'
@app.teardown_request
def teardown(exception):
# 關閉連線資源
g.conn.close()
if __name__ == '__main__':
app.run(debug=True)