flask 中的before_request 與 after_requ

longmanma發表於2021-09-09

1,使用方式

使用before_request 和 after_request的方法都非常簡單,使用 @app.before_request  或者@app.after_request  修飾期望在請求前或請求後執行的函式即可

2,before_request

before_request()函式被修飾以後,每一次請求到來後,都會先執行它,如果沒問題即沒有執行到abort(400),那麼就會進入到正常的被app.route修飾的函式中進行響應,如果有多個函式被app.before_request修飾了,那麼這些函式會被依次執行

@app.before_request

def before_request():

    if not m_ip_range.is_ip_strict():

        return

    ranges = m_ip_range.get_range()

    ip_int = utils.ip_to_int(request.remote_addr)

    yes = False

    for item in ranges:

        if item['is_used']==0:

            continue

        if ip_int >= item['ip_start'] and ip_int <= item['ip_end']:

            yes = True

            break

    if not yes:

        abort(400)

你很關心這個before_request裝飾器有什麼用,其實它的用處非常大,比如我們希望能對ip地址進行過濾,雖然你可以使用nginx,但我們也可以使用before_request來做,使用nginx,我們不得不手動的進行設定,但如果是用flask自身的before_request機制,我們可以在程式判斷出某個ip有惡意訪問行為後將其加入到快取當中(redis),每次請求到來時,由before_request來判斷這個ip是不是合法的。

3,after_request

被app.after_request修飾過的函式會在請求得到相應後返回給使用者前被呼叫,也就是說,這個時候,請求已經被app.route裝飾的函式響應過了,已經形成了response,我們在這個時候做一些操作,flask有一個外掛叫 flask-compress,是對響應結果進行壓縮的,它就是用after_request的這個機制,在response返回前對資料進行了壓縮,如果你有別的想要操作的事情,同樣可以使用after_request來完成。



作者:是歸人不是過客
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2730/viewspace-2816391/,如需轉載,請註明出處,否則將追究法律責任。

相關文章