抽屜之Tornado實戰(9)--裝飾器實現用戶登錄狀態驗證


  當然今天講的驗證,不只Tornado會用,以后用到web框架都會用到,最常見的場景就是只有用戶登陸了才能執行某些操作,所以在執行這些操作前要先做登陸狀態的驗證。

  比如:點贊,發布,評論等需要驗證,都需要用到if self.session【‘is_login’】進行判斷,你可能覺得,這代碼也不多啊,不過一旦網站大了,場景多了,可以寫到你手抽筋,其實我們可以在執行post方法或get方法之前進行登陸狀態的驗證,用裝飾器進行這么一個功能擴充就可以了

decrator.py

#處理刷新頁面的請求
def auth_login_redirect(func):

    def inner(self,*args,**kwargs):
        if not self.session['is_login']:
            #沒登錄,就讓跳到登陸頁面
            self.redirect(config.LOGIN_URL)
            return
        #執行post方法或get方法
        func(self,*args,**kwargs)
    return inner


#處理ajax請求,往往需要返回一段json字符串
def auth_login_json(func):

    def inner(self,*args,**kwargs):
        if not self.session['is_login']:
            #當is_login為False時,沒登錄
            rep = BaseResponse()
            #前端根據這個信息,來確定是否彈出登錄注冊框
            rep.summary = 'auth failed'
            self.write(json.dumps(rep.__dict__))
            return
        #執行post方法或get方法
        func(self,*args,**kwargs)
    return inner

   對於auth_login_redirect方法,只要針對刷新頁面的請求,因為有些網站登錄注冊是一個頁面(比如京東),而且跳轉頁面鏈接定義在配置文件config里,以便修改(LOGIN_URL=‘/login’)

  對auth_login_json方法針對偷偷發請求的,比如抽屜的登陸注冊是以彈出框的形式

  后台對ajax請求是不能做跳轉處理的,即self.redirect對於ajax是無效的,只能前端js調用location.href,而self.redirect只普通請求(刷新頁面)才有效,比如form表單提交

 

應用:

class ManagerHandler(BaseRequestHandler):

    @decrator.auth_login_redirect
    def get(self):
        self.write('ok')

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM