python中如何簡單的實現decorator模式--由django admin源碼所得體會

        這段時間用django做一個小型的應用系統,雖然其自動生成的後臺管理功能很實用,可是畢竟都是按照django自己的方式在表達,很多情況下,並不一定就滿足用戶的要求,於是我就脫其衣,剝其皮,對其自動生成後臺的源碼琢磨琢磨。這篇文章就來自於這次源碼的閱讀工作。
        舉個很簡單,但是在web開發工作中最常見的場景,很多時候,你的很多url在真正執行操作前,都要驗證用戶的權限,總不成每回兒都寫代碼吧,因此你可能會把它寫成一個共用的模塊,要用的時候就調用,但是我今天卻要用另外一種方式來解決問題,說白了,就是實現decorator模式,我們先來看簡單的一段代碼:
python 代碼
  1. # decorator.py   
  2. # 修飾函數   
  3. def decorator(fun):   
  4.     def ifun(*args, **kwargs):   
  5.         args = (i+1 for i in args)   
  6.         return fun(*args, **kwargs)   
  7.     return ifun   
  8.        
  9. # 被修飾函數1   
  10. def fun1(x,y):   
  11.     return x+y   
  12. fun1 = decorator(fun1)   
  13.   
  14. # 被修飾函數2   
  15. def fun2(x,y,z):   
  16.     return x+y+z   
  17. fun2 = decorator(fun2)   
  18.   
  19. # 測試代碼   
  20. a = 3   
  21. b = 4   
  22. c = 5   
  23. print fun1(a,b)   
  24. print fun2(a,b,c)  

        這段代碼運行的結果是:

輸出結果
  1. 9   
  2. 15  

        大家看看上面的代碼,fun1和fun2可以理解爲你要訪問的url要執行的操作,而decorator就是你要做的權限檢查,在這種方式下你的代碼會很乾淨,不是嗎?

        如果有興趣,可閱讀django.contrib.admin.views下面的main.py decorators.py

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章