ジャンゴミドルウェア
必要が通過する要求は、Djangoのミドルウェアのバックエンド(のURL、ビュー、テンプレート、モデル)を取得する場合には、どこへ行く応答
ミドルウェアは、Webサービス・ゲートウェイ・インターフェースに到達するために通過する必要があります
ミドルウェアのジャンゴの役割
1. Webサイトのグローバルな身元確認、アクセス頻度の制限、アクセス権が...チェック限り、それはあなたがミドルウェアで行うことができるグローバルチェックサムに関連する
すべての最高のWebフレームワークで行われ2.djangoミドルウェアの
方法
1.process_request()メソッド
法則
(上から)方法1.リクエストが内部中間process一の各々を通過します
。2.方法は、のHttpResponseオブジェクト内に直接返した場合は、直接ダウン返しは基づいて、実行されませんこの機能が制限される場合があり、アクセス頻度、身元確認、権利検証
2.process_response()メソッドの
法則
1.応答パラメータは、パラメータがデータを参照するために返されるフロントエンドに返される
2.応答離れとき順番にprocess_response方法(ボトムアップ)内の各ブローカー経由します
3.process_view()
ビュー機能の実装を成功さをルーティングする前に試合1.トリガ
(4.process_exceptionを)
1.は自動的に機能エラー表示したときに実行
5.process_template_response()
あなたはHttpResponseオブジェクトに戻ると1が含まれている必要がありますトリガする属性をレンダリング
:DEF指数(Request)を
印刷する( '私は、インデックスビュー機能午前')
DEF(レンダリング):
はHttpResponseを返す( 'どのような地獄のもの')
OBJ =はHttpResponse( 'インデックス')
obj.render =レンダリング
リターンOBJを
概要:あなたはちょうどあなたがミドルウェアを書いているパラメータrepsonseを持っているが、彼女はこのREPONSEがメッセージのフロントエンドを提供することです戻ったと感じています
カスタムミドルウェア
1.あなたが効果を取るためにあなたの文章ミドルウェアをしたい場合、それは最初MiddlewareMixin継承しなければならない
カスタムミドルウェアを登録すると、パスが間違っていないことを確認する必要がある場合2.
CSRF CSRF
内部原則
ユーザーは非表示、入力された名前の属性が設定されていないし、他の上のアカウントの入力を入力することトリックには書かれた名前を達成し、値が入力ボックス内の属性、値がアカウントの受益フィッシングサイトの価値があります
ランダムな文字列は、次のような特徴がある
各訪問が同じブラウザで異なっている1.
2.異なるブラウザが繰り返されることはありません
1.formフォームのPOSTリクエストを送信した場合にのみ、あなたが単語を書くために必要なのです
{%のcsrf_token%}
ポスト要求検証CSRF送るのを避けるためにどのように2.ajax
今取得したキー情報の入力使用して{%csrf_token%}ページ、タグ検索を書く1.
{「ユーザ名」:「ジェイソン」を 、「csrfmiddlewaretoken」:$(「[ 名前= csrfmiddlewaretoken]「)。ヴァル ()}
2.直接描画'csrf_token {} {}'
{ 'ユーザ名': 'ジェイソン'、 'csrfmiddlewaretoken': 'csrf_token {} {}'}
3.方法を得ることができ、ランダムなキーファイルのjsを書き込み、唯一のファイルをインポートする必要があり、その後、新しいファイルが格納された後、次のコードjsが導入することができます
関数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)&&!!this.crossDomain){ xhr.setRequestHeader(" X-CSRFToken " 、csrftoken)。 } } })。
1.グローバルサイトでは、いくつかの処理をチェックする必要はありませんかのチェックCSRF必要がある場合
グローバルサイトはあなたがいくつかの対処方法を確認する必要があるときCSRFをチェックしません2.
django.utils.decorators インポートmethod_decorator から django.views.decorators.csrf インポートcsrf_exempt、csrf_protect #2デコレータはCBVを飾るために時間内にいくつかの違い持つ csrf_protect場合を次の3つの方法があります 。#最初のメソッドの #は@ method_decorator(csrf_protect、名前= 'ポスト ')# 効果的な クラスMYVIEW(ビュー): #第三の実施形態の #の@method_decorator(csrf_protect) DEFの派遣(セルフ、要求、* argsを、** kwargsから): RES =スーパー() .dispatch(要求、* argsを、** kwargsから) 復帰RES DEF:(セルフ、要求)GET を返す(はHttpResponseを' GET ' ) #第2の方法 #1 @method_decorator(csrf_protect)#効果的な DEF POST(自己、要求): ETURNはHttpResponse(' POST ' ) それは2つだけ(csrf_exemptされている場合)のみ具体的にディスパッチする手段 @method_decorator(csrf_exempt、名前 = 「ディスパッチ」) #第二の実施形態は、確認しないことがあり 、クラスをMYVIEW(ビュー): #@method_decorator(csrf_exempt)#は、第1の実施の形態を確認することができません DEF派遣(セルフ、要求、* argsを、** kwargsから): RES。=スーパー()派遣(要求、* argsを、** kwargsから) 戻りRESが デフ(自己、リクエスト)を取得: 返す(はHttpResponseを' 取得' ) デフ(自己、リクエスト)投稿: 返すのHttpResponseを(' ポスト')
唯一のcsrf_exemptデコレータはCBVを飾るために、他のデコレータは、次の3つの方法を持つことができたときに、特殊なケースです
認証モジュールを
使用すると、認証モジュールを使用する場合、あなたは完全なセットを使用することができます
認証モジュールの機能
ユーザーのクエリ から django.contrib インポートAUTH USER_OBJ = auth.authenticate(ユーザ名=ユーザ名、パスワード=パスワード) #は、データベースがパスワードフィールドであり、あなたがユーザ入力が平文暗号文で取得するために使用されなければならない 記録ユーザー状態 AUTH。ログイン(リクエスト、USER_OBJ) #のセッションにおけるユーザーの状態レコード ユーザーログインするかどうかを決定するために 印刷(request.user.is_authenticated) #は、ユーザーがユーザーにログインしている場合はFalseを返します決定し 、ログイン後にユーザオブジェクトにアクセスするユーザーを 印刷(からrequest.user) #何auth.loginはその後、匿名ユーザーを持っていない場合は 、ユーザログがチェックすると から django.contrib.auth.decorators インポート login_required @login_required(LOGIN_URL = " / XXX /') #ローカル構成 DEFのインデックス(要求): パス #グローバルコンフィギュレーション設定ファイル LOGIN_URLを= ' / XXX / 「 パスワードの確認正しい request.user.check_password(OLD_PASSWORD) パスワード変更 request.user.set_password(new_passwordを) からrequest.user .SAVEは() #私たちが力への参入保存保存したりしてはならないときにパスワードを変更 ログアウト auth.logout(リクエスト) #のrequest.session.flushを() ユーザー登録 #User.objects.create(ユーザー名=ユーザー名、パスワード=パスワード)#をユーザー名を作成し、時間を使用し作成していない #通常のユーザーを作成User.objects.create_user(ユーザー名=ユーザー名、パスワード=パスワード)#を User.objects.create_superuser(ユーザ名=ユーザ名、パスワード=パスワード、電子メール= ' [email protected] ') #は、スーパーユーザーの電子メールを作成します(必須)
カスタムAUTH_USERテーブル
django.contrib.auth.models インポートAbstractUserの #。ここにあなたのモデルを作成します壁紙 #は、最初は1人の関係が考慮されていない使用しています 。#は、クラスを使用する2番目の方法は継承された クラス:のUserInfo(AbstractUserを) #は、元のテーブルに従わないでください。フィールドは、革新的な繰り返すことができます 電話= models.BigIntegerField() アバター = models.CharField(max_lengthを= 32 ) #は、設定ファイルでDjangoの教えてください #ジャンゴORMもはや認証デフォルトのテーブルを使用しますが、カスタムを使用するに教えていませんテーブル AUTH_USER_MODEL = 「app01.Userinfo 」 #「アプリケーション名。クラス名」
1.データベース移行コマンドを実行して
、すべての認証モジュールの機能は、すべてあなたが作成したテーブルに基づいている
代わりに、AUTH_USERを使用します