web專案026-----裝飾器的定義

zaaaacki發表於2020-12-01

裝飾器的定義

首先我們思考,我們應該以什麼樣的一個狀態進入到這個介面

肯定不能是直接輸入my.html

我們應該以登陸的狀態進入到這個介面,不登入不能進

我們需要做一個這個功能,驗證使用者是否登陸,如果沒有登陸就跳轉到登陸頁面

我們需要自己定義一個裝飾器

在commons.py中定義我們的裝飾器,因為他和業務邏輯沒有關係,是一個自定義工具,所以我們放到了utils檔案中的commons.py檔案中

我們把user_id儲存到全域性的g物件中,不存也可以,在session中取也行

我們在裝飾器中再匯入一個裝飾器,functools

舉個例子

functools的作用就是保持原函式的屬性

迴歸整體,這就是我們定義的裝飾器

# view_func---被裝飾的函式
def login_required(view_func):

    @functools.wraps(view_func)
    def wrapper(*args,**kwargs):
        # 判斷使用者的登陸狀態,我們用user_id進行判斷
        user_id = session.get('user_id')

        if user_id is not None:
            # 已登陸
            g.user_id = user_id
            return view_func(*args,**kwargs)
        else:
            # 未登入
            return jsonify(errno=RET.SESSIONERR,errmsg='使用者未登陸')


    return wrapper

 

相關文章