pythonでdecoratorモードをどのように簡単に実現するか--django adminソースコードから得られた体得

1220 ワード

この時間はdjangoで1つの小型の応用システムをして、その自動生成のバックグラウンドの管理機能はとても実用的ですが、結局すべてdjango自身の方式によって表現して、多くの情況の下で、必ずしもユーザーの要求を満たすとは限らなくて、そこで私はその服を脱いで、その皮を剥いて、その自動生成のバックグラウンドのソースコードに対してよく考えます.この文章は今回のソースコードの読書から来た.
簡単ですが、web開発の仕事の中で最も一般的なシーンを挙げると、多くの場合、あなたのurlは本当に操作を実行する前に、ユーザーの権限を検証しなければなりません.毎回コードを書くことはできません.そのため、共通のモジュールに書くかもしれません.使うときに呼び出すかもしれませんが、私は今日別の方法で問題を解決しなければなりません.はっきり言って、decoratorモードを実現します.まず簡単なコードを見てみましょう.
# decorator.py   
#        
def decorator(fun):   
    def ifun(*args, **kwargs):   
        args = (i+1 for i in args)   
        return fun(*args, **kwargs)   
    return ifun   
       
#      1   
def fun1(x,y):   
    return x+y   
fun1 = decorator(fun1)   
  
#      2   
def fun2(x,y,z):   
    return x+y+z   
fun2 = decorator(fun2)   
  
#        
a = 3   
b = 4   
c = 5   
print fun1(a,b)   
print fun2(a,b,c)

このコードの実行結果は、出力結果です.
9   
15
        
上のコードを見てみると、fun 1とfun 2はアクセスするurlが実行する操作と理解できますが、decoratorはあなたが行う権限チェックです.このようにして、あなたのコードはきれいになるのではないでしょうか.
興味があればdjangoを読むことができます.contrib.admin.viewsの下のmain.py decorators.py