ジャンゴミドルウェア
DjangoのミドルウェアのセキュリティをDjangoのために似たような、リクエストがDjangoのミドルウェアのバックエンド(のURL、ビュー、テンプレート、モデルを取得するために通過する必要がある場合 )、
応答がWebサービス・ゲートウェイ・インタフェースに到達するためのミドルウェアを通過する時間がかかります
ジャンゴミドルウェア、ユーザーがカスタマイズできる5つの方法があります
Djangoのミドルウェアは何をすべきかを使用することができますか?
1. Webサイトのグローバルな身元確認、アクセス頻度の制限は、権限を確認します。。限りチェックがグローバルを伴うようミドルウェアで行うことができ
、すべてのWebミドルウェアフレームワーク2.django、最善を尽くす
マスターにする方法を、次のとおりです。
メソッド1.process_request()
法
1.要求時間、各中間メソッドは内部process一ます後
要求方法から順次下方process一実行される時間2.直接次にスキップされていない場合
3. process一()メソッド、「」(のHttpResponseを返します)オブジェクト、値がブラウザに直接戻され、ミドルウェアとバックビュー層は行かない
周波数特性に基づいてアクセスを制限するために行うことができ、本人確認、パーミッションチェック
方法2.process_response()
ルール
1応答で行きます時間。実行後ビュー機能を順次、法によりアップprocess_responseスキップしない場合は、次に行く実行されるまで、
データを参照するための応答パラメータは、のフロントエンドに返されるため、応答は返さなければなりません2.
理解:
3.process_view ()
ルートの試合では、ビュー機能が実行される火災の前に#
4.process_exception()
エラーは、すぐにprocess_exception方法の引き金たら長いビュー機能として#を
5.process_template_response()
あなたはHttpResponseオブジェクトに戻ると#を属性が含まれている必要がありますが、レンダリングトリガする
概要を:限り応答パラメータとして、それはフロントエンドの応答を返す必要があります
私たち自身のミドルウェアのカスタム:
1.あなたがミドルウェアをカスタマイズしたい場合は、それがMiddlewareMixin継承しなければなりません
内部の設定に移動し、ミドルウェアの2定義をミドルウェアマニュアルを追加
django.utils.deprecation インポートMiddlewareMixin から django.shortcutsは、インポートはHttpResponse クラス:MyMdd(MiddlewareMixin) DEF :process一(自己、要求) を印刷(「私は最初のミドルウェアprocess一の方法であった」) #のリターンのHttpResponseを(「より面白いです」 ) DEF process_response(セルフ、要求、応答): 印刷(「私は最初のミドルウェアprocess_response方法だった」) #の印刷(レスポンス) を返すレスポンス DEFをprocess_view(セルフ、リクエスト、view_func、view_argsと、view_kwargs): 印刷(view_func) 印刷(view_argsと) 印刷(view_kwargs) 印刷(" 私は最初のミドルウェアprocess_view方法だった" ) DEFのにprocess_exception(セルフ、要求、例外): 印刷(「私は最初にprocess_exceptionだった」) DEFの:process_template_response(セルフ、要求、応答) を印刷(「私は最初のミドルウェアprocess_template_response方法だった」) を返すレスポンス クラスをMyMdd1(MiddlewareMixin): DEF process一(セルフ、要求): 印刷(「私はprocess一法第二ミドルウェアだった」) DEFのprocess_response(セルフ、要求、応答): 印刷(「私は2番目のミドルウェアprocess_response方法でした」) を返すレスポンス DEFのprocess_view(セルフ、リクエスト、view_func、view_argsと、view_kwargsを): 印刷(view_func) 印刷(view_argsと) 印刷(view_kwargs) 印刷(" 私は2番目のミドルウェアprocess_view方法だった" ) DEFprocess_exception(セルフ、要求、例外): 印刷(「私は2番目にprocess_exceptionだった」) DEFのprocess_template_response(セルフ、要求、応答): 印刷(「私は最初のミドルウェアprocess_template_response方法だった」) を返すレスポンスを
CSRF CSRFは、
フィッシングサイト:簡単に言えば、ユーザーが自分の目的のために、変更を行い、お互いの情報を、ラベルを非表示にすることにより、機器の情報を転送入力することができ、正確に同じユーザーにウェブサイトのページです
:ウェブサイトをフィッシングのアイデアを防止するための
ウェブサイトをユーザーのフォームフォームページに戻ります密かにランダムな文字列を詰め
要求を直接拒否していない場合は、ランダムな文字列が、同じ最初よりも、意志来る
:ランダムな文字列は、次のような特徴がある
同じブラウザ1.毎回アクセスは同じではありません
。2.別のブラウザを繰り返すことはしません
:あなたは、フォームに書き込むように要求フォームをポストする必要がある場合1.formフォームが送信され
、{%}%csrf_token
2.ajax CSRFチェック回避する方法にPOSTリクエストを送信する
最初の1。ページの書き込み{%csrf_token%}、入力キー情報を取得するためにタグルックアップを使用して
データ:{ 'ユーザ名': 'ジェイソン'、 'csrfmiddlewaretoken':$( '[NAME = csrfmiddlewaretoken]')のVal()}、
2直接描画csrf_token} {} {
データ:{ 'ユーザ名': 'ジェイソン'、 'csrfmiddlewaretoken': 'csrf_token {} {}'}、
3.あなたは方法を得ることができ、ランダムなキーを書き込み、その後に導入されたJSファイル、
{%負荷静的%}
{#<スクリプトSRC = "{%静的'setjs.js' %}"> </ SCRIPT>#}
<SCRIPT>
$( '#のB1')をクリックします(関数(){。 $アヤックス({ URL: ''、 タイプ'POST'、 //最初の方法の データ:{ 'ユーザ名': 'ジェイソンは'、 '' csrfmiddlewaretoken :$( '[NAME = csrfmiddlewaretoken]')のVal()} ,. //第二のアプローチの データ:{ 'ユーザ名': 'ジェイソン'、 'csrfmiddlewaretoken': 'csrf_token {} {}} //最初の直接JS導入ファイル:3つの方法で データ:{ 'ユーザ名': 'ジェイソン'}、 成功:機能(データ){ アラート(データ) } }) </ スクリプト>
1.いつ、いくつかの処理をチェックする必要はありませんかのCSRF戻って確認するものグローバルなニーズ
のグローバルサイトはあなたがいくつかの対処方法を確認する必要があるときCSRFをチェックしていない場合は2を
#スクール経験CSRF
インポートcsrf_exempt、csrf_protect#django.views.decorators.csrfから
django.utils.decoratorsインポートmethod_decoratorから
CBVで装飾両方の装飾が施され、異なる
キャンセルチェックをcsrf_exempt
できるだけ表示プラスデコレータ
@method_decorator(csrf_exempt)#最初のテストではないかもしれません
DEF派遣(セルフ、要求、* argsが、** kwargsから):
(**、* kwargsからの引数を要求、)スーパー()の発送を返す。
、三つの方法を確認しcsrf_protect
#最初のモードを確認します 。#@method_decorator(csrf_protect、名前= "POST") クラスにMYVIEW(ビュー): #第三のチェック方法: #@method_decorator(csrf_protect)このように#取得し、ポストが接続されています DEFの派遣(セルフ、要求、* argsを、** kwargsから): リターン。スーパー()派遣(要求、* argsを、** kwargsから) DEF (自己、要求)GET: リターンのHttpResponse(" GET " ) #1 秒方法: #1 @method_decorator(csrf_protect) DEF POST(自己、要求): 返すのHttpResponse("ポスト」)
認証モジュールテーブルは、
データベースの移行を実行した後AUTH_USER表は、ユーザーに関連付けられたテーブルであるそれらの多くを生成することができ
、データを追加
ジャンゴ管理者バックエンドにログインすることができますcreatesuperuserがスーパースーパーユーザを作成し実行する
:方法
1.#の認証クエリテーブル
USER_OBJ = AUTH。認証(ユーザ名=ユーザ名、パスワード=パスワード)
パスワード保存された暗号文であるルックアップテーブルは、オブジェクトを返す#、
2.auth.loginは(要求は、USER_OBJ) #ユーザ状態テーブルは、セッション中にクライアントセッション前出の記録します
#実行限り、あなたはどこかからrequest.userによって後端部に現在のユーザーオブジェクトにこの言葉を得ることができるよう「」 "
#印刷(request.user.username)
#印刷(request.user.password)
3.ユーザーかどうかを判断します着陸、着陸がTrue
#request.user.is_authenticated)
4.パスワードの変更方法:
自動的に暗号化is_right = request.user.check_password(OLD_PASSWORD)#、パスワード検証データベースが正しいです
is_right場合:正しい#チェックがある真
印刷(is_right)
request.user.set_password(new_passwordを)#新しいパスワードの設定
request.user.save()#は、変更されたパスワード情報保存
5.ログオフ
#のキャンセルは
@login_required
DEFジンバブエログアウト(要求を):
AUTHを.logout(リクエスト)セッションが一緒にフラッシュに相当削除される前に#後に終了
(「終了」)のHttpResponseを返す
認証ログインモジュールデコレータ
django.contrib.auth.decoratorsからはlogin_requiredインポートが
設定内部に配置されていてもよい:
LOGIN_URL = " /土地/」このページに転送され着陸後、
カスタム認証テーブルで認証モジュールの構文を使用している間、あなたは、フィールドを追加することができます
django.dbインポートモデルから
インポートAbstractUser django.contrib.auth.modelsから
クラスの継承を使用する2番目の方法は、認証テーブルにフィールドを追加することができます
クラスのUserInfo(AbstractUser):
#は、元のテーブルとフィールドでのみイノベーションを繰り返さないでください
= models.BigIntegerField()電話
アバター= models.FileField(upload_to = " /アバター「)
も、デフォルトのテーブル構成ファイルを使用しないDjangoの指示する必要があります
Djangoは自己定義されたリストを使用、もはや使用する前にテーブルを伝えない
app01.Userinfo「#アプリケーション名。クラス名AUTH_USER_MODEL =を」