Djangoのミドルウェア
ジャンゴライフサイクルチャート
ミドルウェア:
コンセプト:DjangoはミドルウェアのセキュリティをDjangoのに似ています
リクエスト 時間ミドルウェアはDjangoのバックエンドを取得するために通過する必要があります(URL、ビュー)
それに応答して 、Webサービスゲートウェイインターフェイスに到達するためのミドルウェアを通過する時間がかかります
Djangoのデフォルト7つのミドルウェア
ミドルウェア= [ ' django.middleware.security.SecurityMiddleware ' 、 ' django.contrib.sessions.middleware.SessionMiddleware ' 、 ' django.middleware.common.CommonMiddleware ' 、 ' django.middleware.csrf.CsrfViewMiddleware ' 、 ' django.contrib。 auth.middleware.AuthenticationMiddleware ' ' django.contrib.messages.middleware.MessageMiddleware "、 ' django.middleware.clickjacking.XFrameOptionsMiddleware ' 、 ]
Q:Djangoのミドルウェアは***行うために使用することができますか?
1. Webサイトのグローバルな身元確認、アクセス頻度の制限、権限検証.....
2.djangoミドルウェアは、Webフレームワークでベストを尽くします
Djangoのミドルウェア、ユーザーがカスタマイズできる5つの方法があります。
process_response process一process_viewにprocess_exception process_templates
あなたはどのようにカスタマイズするのですか?
①最初のアプリカタログで同じレベルを必要とする独自のミドルウェアを作成することで、あなたのPYファイルを作成します
②インポートモジュール django.utils.deprecationのインポートMiddlewareMixinから
③ミドルウェアを書き換えるためのトップ5つの方法を継承する独自のクラスのニーズを定義します
設定ファイルの設定④ ミドルウェアは、たとえば、文字列のポイントを追加しました:「の.pyファイルフォルダクラス名」
process一(リクエスト)方法
法律:1. リクエスト(各中間process一方法の内部を通過する時間は上から下へ)
2.返す直接法場合はHttpResponse実行の同じレベルを実行するためにダウンバックアップしませんオブジェクトをprocess_responseの方法が戻ります
前記方法は、受信されなければならない要求のアクセス周波数特性に基づいているパラメータは、権利の確認、身元を確認するために行うことができます
process_response(リクエスト、レスポンス)方法
ルール:1.パラメータがしなければならないリターンをREPONSEこのパラメータがされているため、フロントエンドのデータにバックエンドで返されます
2. 応答時間はprocess_response方式内の各ターンにおけるミドルウェア通過する(ボトムアップ)
どのようにすることを学びます:
process_view(リクエスト、view_func、view_argsと、view_kwargs)
トリガ機能を実行する前に成功した試合をルーティングした後にトリガ
view_func URLが一致する関数パラメータはview_argsととview_kwargsある対応する図であります
process_exception(リクエスト、例外)
あなたが機能を表示すると自動トリガに戻って与えられています
process_template_response(リクエスト、レスポンス)
あなたが戻ったときのHttpResponseの属性をレンダリング含まれている必要がありますオブジェクトがトリガされます
概要:限りがあるので、応答パラメータは、それは彼が必要とするデータを返します入れミドルウェア時間を書くことは、フロントエンドであります
CSRF CSRF
はじめに:フィッシングウェブサイト:正の子供を提出した8つのサイトによって生成されたデータを修正するためにユーザーに入力された情報をごまかすためのサイトと8人の子供はまったく同じインターフェース
内部原則:トリックを再生するには、ユーザー入力を聞かせすることは、入力を与え、転送値の反対側に内部入力ボックスに書かれた名前と属性値の入力ボックスを非表示にするname属性を設定しないフィッシングサイトのアカウントの形式の受益者は、データを形成しています8人の子供の代わりに提出
フィッシングサイトのアイデアを防止するため
のウェブサイトは、ユーザーにフォームページのフォームに戻ります密かにランダムな文字列のぬいぐるみ
要求がする最初のランダムな文字列が同じであるよりも、来て直接(403)を拒否していない場合を
ランダムな文字列は、次のような特徴がある
。1.各訪問は、同じブラウザで異なっている
。2.異なるブラウザはしません繰り返すことを
-------------------------------------------------- -------------------------------------------------- ---------------------------------------
1. POSTリクエストフォーム送信するためのフォームあなたがする必要があるが、言葉だけの書き込みである{{%csrf_token%を}}
我々は右のミドルウェアが彼のコメントを開け持つことができるようにあなたが直接あなたに403を与えていないcsrfmiddlewaretoken何かを持っていないことを確認することです
2. 場合、そのような要求ajsx送信とポスト検証CSRFを防ぎます
タグのname属性のファインダーを使用して、ページ上の1.最初の書き込み{%csrf_token%}、取得したキー情報を入力して下さい
2.直接書き込み '{{csrf_token}}
3.ランダムなキーと値のペアを得る方法は、JSファイルを書いて、あなただけのインポートできるファイルの後に
JSファイルと静的PYファイル内のファイルを作成し、リードで書かれたコードの次の行の後
関数getCookie(名){ VARにcookievalue = NULL ; もし(!document.cookie && document.cookie == '' ){ VARのクッキー= document.cookie.split( ';' ); ため(VAR i = 0; iがcookies.lengthを<; iは++ ){ VARのクッキー= jQuery.trim(クッキー[I])。 // このクッキー文字列は、私たちが望むの名前で始まりますか? 場合(0(cookie.substring、name.length + 1)===(名+ '=' )){ にcookievalue =は、decodeURIComponent(cookie.substring(name.length + 1 ))。 破ります; } } } リターンにcookievalue。 } VAR csrftoken = getCookie( 'csrftoken' )。 機能csrfSafeMethod(メソッド){ // これらのHTTPメソッドはCSRF保護を必要としない リターンを(/ ^(GET | HEAD |オプション| TRACE)$ / .TEST(法)); } $ .ajaxSetup({ beforeSend:機能(XHR、設定){ もし!(csrfSafeMethod(settings.type)&& この.crossDomain){ xhr.setRequestHeader( "X-CSRFToken" 、csrftoken); } } });
どのようにした後の行に合格する方法に渡します
1.ときに、いくつかがあるとき、あなたのサイトのCSRFをチェックするグローバルな必要性はどのようにこのプロセスをチェックする必要はありませんか?
私たちが何をすべきいくつかのチェックがあるときにCSRFをチェックしないグローバルなウェブサイトが必要です2.?
django.views.decorators.csrf 輸入 csrf_exempt、csrf_protect
チェックしないcsrf_exempt
のみチェックcsrf_protect
CBVの装飾
django.utils.decorators インポート method_decorator
装飾CBVの際にどちらのデコレータはかなり異なっている そうであれば、csrf_protect三つの方法があります 。#は、第1の実施例 #1 (csrf_protect、名前=「POST」)#効果的な@method_decorator クラス:MYVIEW(ビュー) #の三つの方法 #1 @method_decorator(csrf_protect) DEFの派遣(セルフ、要求、* argsを、** kwargsから): RES =スーパー()派遣(要求、* argsを、**。kwargsから) リターンRES DEF (セルフ、要求)GET : 返す(はHttpResponseを' GET ' ) #二番目の方法は #@method_decorator(csrf_protect)#有效的 デフ投稿(自己、リクエスト): 返すのHttpResponseを(' ポスト')
2つだけcsrf_exemptは、具体的に(のみディスパッチする手段)場合 @method_decorator(csrf_exempt、名前 =「ディスパッチ」) #をチェックしなくてもよい第二の実施形態 のクラスMYVIEW(ビュー): #の最初の#の@method_decorator(csrf_exempt)を種マナー検証しないことがあり DEF派遣(セルフ、要求、* argsを、** kwargsから): RES =スーパー()派遣(要求、* argsを、**。kwargsから) リターンRESを DEF (セルフ、要求)GET: リターン HttpResponse(' GET ' ) DEF POST(自己、要求): 返すのHttpResponseを(「POST 」)
デコレータのみcsrf_exemptはCBVを飾るために、他のデコレータは、次の3つの方法を持つことができたときに、特殊なケースです
DEF :(FUNC)login_auth @wraps(FUNC) デフインナー(要求、* argsを、** kwargsから): #从要求中获取クッキー #プリント(request.path) #プリント(request.get_full_path()) target_url = リクエストを。 get_full_path() の場合 request.COOKIES.get(' 名前' ): RESの = FUNC(要求、* argsを、** kwargsから) 戻りRES 他: リターンリダイレクト(' ?/ LG /次=%sの'%target_url) リターン インナー
認証モジュール
はじめに:認証モジュールは、ユーザの機能モジュールに関連付けられている(あなたは、フルセットを使用する認証モジュールを使用する場合)
① データベース移行コマンドを実行した後にテーブルがたくさんありますauth_uesrを形成しているユーザーに関連します。
データを追加② createsuperuser Djangoの管理、バックグラウンドでログインし、スーパーユーザー権限を持つことができ、スーパーユーザを作成
設定したメールボックスのユーザー名とパスワードのAUTH_USERテーブルは、データを記録するために行くことができますし、管理者でログインします
認証モジュールの機能
インポートモジュール
django.contribのインポート認証
サブああを使用してダイレクトビュー機能
クエリユーザー
USER_OBJ = auth.authenticate(ユーザ名= 'XXX'、パスワード= 'XXX')
レコードユーザステータス
auth.login(リクエスト、USER_OBJ)