グローバル・コンポーネント:
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() リターンインナー @ログインする デフインデックス(): 印刷(" こんにちは" ) インデックス()
デコレータ関数は外側のクロージャの関数であると言うことができます。
デコレータやグローバルなコンポーネントが補完的な関係であると言うことができます。関数の数は、いくつかのロジックを追加する必要がある場合。あなたはデコレータを使用することができます。機能のほとんどは、いくつかのロジックを追加する必要がある場合は、グローバルなコンポーネントを使用することができます。