グローバル要素やデコレータジャンゴ5、

グローバル・コンポーネント:

  1、世界的なコンポーネントは、ミドルウェア内のデータDjangoのデフォルト設定です。

    すべての要求はエラーが、ちょうどに行くしない場合は、再度、実行するために、すべてのコンポーネントファイルの配布をルーティングする前に考えなければなりません。

    するインターフェイスの必要性の操作の大半のために。私たちは、内部のコンポーネントを置くことができます。たとえば、クッキー、セッション、トークン検証

    。コードは以下の通りであります:

クラスSessionCheck(MiddlewareMixin):
     ""」
    ログインインターフェイスに加えて、セッションの検証を行います。
    インターフェースの残りの部分は、常にログインセッションにリダイレクトされていません
    ""」
    defのprocess一(自己、リクエスト):
         もし request.path  [ " /ログイン/ " ] または [ " / REG / " ]:
             戻りなし
         、他
            sログイン = request.session.get(" ログイン" 場合 ではないsログイン:
                 リターンリダイレクト(" /ログイン/ " のelif request.path  [ " /エラー/ " ]:
                 戻りなし
             、他戻りなし

    デフprocess_response(自己、要求、応答):
         リターン応答


クラスAccessFrequencyVerification2(MiddlewareMixin):
     ""」
    キャリブレーションの頻度を訪問。
    1、毎回ログ。IPのレコードへのアクセスかどうかを照会内部テーブルで。
    2、そうでない場合。レコードのIP、アクセス時間。書かれた訪問1
    3、クエリテーブルはIPの記録へのアクセスの内側に存在する場合。そして、現在時刻からのアクセス時間は60年代、アクセス数1未満です。同じより大きい。
    アクセス数が決定される前に、図4は、20よりも大きいがあります。もしそうなら、別のページに要求。
    ""」
    defのprocess一(自己、リクエスト):
         もし request.path  [ " /エラー/ " ]:
             戻りなし
         、他もし request.META.get(' HTTP_X_FORWARDED_FOR ' ):
                IP = request.META.get(" HTTP_X_FORWARDED_FOR " 
                IP = request.META.get(" REMOTE_ADDR " 
= AccessFrequencyVerification.objects.filter(IP = IP)を1次回()
             のIF AはIS なし:
                 新しいユーザーデータがロジック挿入 
                時間を= timezone.now()
                AccessFrequencyVerification.objects.create(
                    IP = IP、
                    Access_time = 時間、
                    :NUMBER_VISITS = 1 
            古いユーザーロジックを処理 
                Access_time = AccessFrequencyVerification.objects.filter(IP = IP)1次回()Access_time。
                時間 = timezone.now()
                time_difference =タイムAccess_time
                A = AccessFrequencyVerification.objects.filter(IP = IP)1次回()。:NUMBER_VISITS
                B = datetime.timedelta(秒= 60 の場合 time_difference < B:
                     #1 60代之内连续登录 
                    AccessFrequencyVerification.objects.filter(IP = IP).update(回数NUMBER_VISITS = A + 1 #1 60代之后登录 
                    AccessFrequencyVerification.objects。フィルタ(IP = IP).update(Access_time = 時間)
                    AccessFrequencyVerification.objects.filter(IP = IP).update(回数NUMBER_VISITS = 0)
                 の場合 > 20 リターンリダイレクト(" /エラー/ " 戻りなし

      チェックは、チェックは、IPアクセス頻度で、セッションです。書き込み後のルーティングを有効にするミドルウェア内部を書きました

 

 

デコレーター

  1は、デコレータを学習する前に最初のクロージャを理解する必要があります。閉鎖機能:内部機能層は、環境変数関数に適用しました。次のように基本的な形式は次のとおりです。

デフ)(追加:
    A = 1

    デフインナー():
         プリント()
     の戻りインナー

= 追加()
 印刷(。__closure__

    結果を印刷します。

 

     ない閉鎖した場合、印刷はNoneです。

  

  2、デコレータ:

    以下は、デコレータの簡単な例です。

デフログイン(FUNC):

    デフインナー():
         プリント" AAAAAAAAAA " 
        FUNC()
    リターンインナー


@ログインする
デフインデックス():
     印刷" こんにちは" 


インデックス()

    デコレータ関数は外側のクロージャの関数であると言うことができます。

    デコレータやグローバルなコンポーネントが補完的な関係であると言うことができます。関数の数は、いくつかのロジックを追加する必要がある場合。あなたはデコレータを使用することができます。機能のほとんどは、いくつかのロジックを追加する必要がある場合は、グローバルなコンポーネントを使用することができます。

    

      

 

    

おすすめ

転載: www.cnblogs.com/cbslock/p/12157628.html