一、鉤子函式的概念
鉤子函式是windows訊息處理機制的一部分,通過設定「鉤子」,應用程式可以在系統級對所有訊息、事件進行過濾,訪問在正常情況下無法訪問的訊息。鉤子的本質是一段用以處理系統訊息的程式,通過系統呼叫,把它掛入系統。
二、常用的三大鉤子函式
註冊乙個函式,在處理第乙個請求之前執行.
執行程式,呼叫def
bf_first_request
():
g.string =
'before_first_request'
http://localhost:5000/test會顯示g中傳遞的string變數
註冊乙個函式,在處理每次請求之前執行.
註冊乙個函式,在每次請求之後執行.註冊的函式至少需要含有乙個引數,這個引數實際上為伺服器的響應,且函式中需要返回這個響應引數.
三、主要解決的實際問題(**奉上)def
af_request
(param):
return param
–1.訪問頻率的限制
–2.封爬蟲的ip
import time
from flask import request
from flask_restful import abort
path_list = ["/goods/"]
permission_buy_list =
defload_middleware
defbefore
(): path = request.path
ifnot path.startswith("/_debug"):
ip = request.remote_addr
black_list = cache.get("black") or
if ip in black_list:
# abort(400, message="小夥子,爬蟲獲取十條資料就是三年")
return
"小夥子,爬蟲獲取十條資料就是三年", 400
request_list = cache.get(ip)
if request_list:
"""[11:42:05, 11:42:07, 11:43:10, 11:43:33]
反轉時間
[11:47:50, 11:47:30, 11:47:22, 11:46:55...]
"""while request_list and time.time() - request_list[-1] >= 60:
request_list.pop()
if len(request_list) > 60:
cache.set("black", black_list, timeout=60*60*24)
# abort(400, message="小爬蟲回家睡覺吧")
return
"小爬蟲回家睡覺吧", 400
if len(request_list) > 30:
request_list.insert(0, time.time())
cache.set(ip, request_list, timeout=60)
return
"您的請求頻率過高"
else:
request_list =
print(ip, len(request_list))
request_list.insert(0, time.time())
cache.set(ip, request_list, timeout=60)
mysql 鉤子函式 Flask鉤子函式是什麼
flask鉤子函式 在flask中鉤子函式是使用特定的裝飾器的函式。為什麼叫做鉤子函式呢,是因為鉤子函式可以在正常執行的 中,插入一段自己想要執行的 那麼這種函式就叫做鉤子函式。before first request flask專案第一次部署後會執行的鉤子函式。before request 請求已...
Flask之鉤子函式
1 before first request deffirst request print first time request 2 before request 使用較多 defbefore request ifnothasattr g,glo1 setattr g,glo1 想要設定的 deft...
鉤子函式使用小結
鉤子函式使用小結 首先讓我們看看hook函式是怎麼安裝 呼叫和刪除的。應用程式通常是呼叫setwindowshookex 函式來進行安裝的,其函式的原型如下 setwindowshookex int idhook,hookproc lpfn,hinstance hmod,dword dwthread...