Sanic 處理函式修飾器

veelion發表於2019-04-15

因為Sanic處理函式就是普通的 Python 函式,所以我們可以想 Flask 那樣對它們使用修飾器。比較典型的應用場景是,我們希望在執行處理函式之前執行一些程式碼。

Sanic handler decorator 處理函式修飾器

授權修飾器

web應用中經常需要特定使用者許可權才能訪問某些路徑。我們可以建立修飾器來包裝處理函式,檢查一個請求的客戶端是否被授權訪問,,並返回適當的響應。

from functools import wraps
from sanic.response import json

def authorized():
    def decorator(f):
        @wraps(f)
        async def decorated_function(request, *args, **kwargs):
            # run some method that checks the request
            # for the client's authorization status
            is_authorized = check_request_for_authorization_status(request)

            if is_authorized:
                # the user is authorized.
                # run the handler method and return the response
                response = await f(request, *args, **kwargs)
                return response
            else:
                # the user is not authorized. 
                return json({'status': 'not_authorized'}, 403)
        return decorated_function
    return decorator


@app.route("/")
@authorized()
async def test(request):
    return json({'status': 'authorized'})

使用者授權檢查是處理函式修飾器應用的一個典型場景,任何需要使用者授權的路由節點都可以使用該修飾器進行修飾。

這個功能也可以透過 Sanic 中介軟體 來實現,感興趣的同學可以嘗試用中介軟體來實現授權檢查。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章