ジャンゴ - クロスサイトリクエストフォージェリ、認証の認証モジュールCSRF

フォームクロスサイトリクエストフォージェリで使用されるフォーム

  {%Csrf_token%}は
  動的入力ボックスを生成し、ランダム値の内部がリフレッシュされます

 

 

あなたはCSRFをチェックしたくない場合

  django.views.decorators.csrf輸入csrf_exemptから、csrf_protect

  その上に、私は装飾的な機能を追加したくない@csrf_exempt

  

あなたは上記の機能に加えて@csrf_protectに単一の単語を確認したい場合

 

 

 

CBVにCSRFの追加サードパーティ製のモジュールをインポートすることです

  django.utils.decorators輸入method_decoratorから

  そして、飾ら上記の方法のmethod_decoratorを使用して、最初のパラメータは、メソッド名を開発するcsrf_protect、第二引数に渡されます

 

同じ時間装飾で、通常のCBVのデコレータでcsrf_protect、だけでなく、次の3つの方法のことができ

以下の2つだけの方法csrf_exempt

@method_decorator(csrf_exempt、名前= ' 派遣' クラスインデックス(ビュー):
    @method_decorator(csrf_exempt)
    デフ派遣(自己、要求、* argsを、** kwargsから): スーパー()派遣(要求、 * argsを、** kwargsから)

 

 

認証モジュール: 

  スーパーユーザを作成するためのコマンドライン

    createsuperuser

  Djangoの認証モジュールが内蔵されているユーザ認証モジュール

    当社は、ユーザーのシステムを実現するためにウェブサイトを設計する必然的な必要性を、サイトを開発しています。この時点では、ユーザ登録、ユーザのログイン、ユーザ認証、ログオフ、変更するパスワードやその他の機能を含め、達成するために必要

    Djangoは、強力なユーザ認証システム--authを構築し、デフォルトではユーザーデータの格納にテーブルをAUTH_USERします

 

  認証モジュール一般的に用いられている方法:

    認証する()

      二つの重要なパラメータは、ユーザ認証機能を提供する、つまりユーザー名とパスワードを確認するために正しい、それは通常、ユーザー名をとり、パスワード 

      認証が成功した場合、それはユーザーオブジェクトを返します。

      ユーザを識別するためのオブジェクトの後端部にプロパティを設定する()認証は、ユーザを認証し、その情報は着陸の後の工程で必要とされます

  

    ログイン(HttpRequestの、ユーザー)

      この関数は、のHttpRequestオブジェクトを受け取り、ユーザーオブジェクトが認定します

      この機能は、ユーザーのログイン機能を実装し、それは基本的にバックエンドでユーザーのために、関連するセッションデータを生成します。

 

    ログアウト(リクエスト)

      この関数は、戻り値はありません

      関数が呼び出されると、現在のセッション要求は明確です。ユーザーがログインしていない場合でも、この関数はエラーを使用していません

 

    is_authenticated()

      これは、現在の要求が認証されているかどうかを決定するために使用しました

  

    ログインが必要です()  

      認証は、チェック機能にビューを追加するために迅速なログインのための装飾的なツールを提供してくれます

django.contrib.auth.decorators インポートするlogin_required 
      
@login_required 
デフ(要求)をmy_view:
  ...

 

      ユーザーがログインしていない場合、Djangoは(成功した着陸がパスにリダイレクトされます後場合)の絶対パスにアクセスするためのデフォルトのログインURLにジャンプ「/アカウント/ログイン/」と現在のURLを渡します。

      カスタムURLにログインする必要がある場合は、settings.pyファイルにLOGIN_URLによって変更する必要があります

= LOGIN_URL /ログイン/   ルートにプロジェクトのログインページを構成し、ここで

    ユーザーを作成()

      新しいユーザ認証オファーを作成する方法は、必要なパラメータ(ユーザ名、パスワード)などを提供することが必要です

django.contrib.auth.models インポートするユーザ
のユーザ = User.objects.create_user(ユーザ名= ' 用户名'、パスワードを= ' 密码'、電子メール= ' 邮箱'、...)

    

    create_superuser()

      新しいユーザ認証オファーを作成する方法は、必要なパラメータ(ユーザ名、パスワード)などを提供することが必要です

django.contrib.auth.models インポートユーザー
ユーザー = User.objects.create_superuser(ユーザ名は= ユーザ名、パスワード= パスワード、Eメール= メールを、...)

 

      

    check_password(パスワード)

      設けられたチェック認証パスワードが正しいアプローチである、あなたは現在のユーザの要求のパスワードを提供する必要があり、正しいパスワードは、それ以外の場合はFalseを返し、Trueを返します

user.check_password = OK(' パスワード'

 

  

    set_password(パスワード)

      AUTHを提供されたパスワードを変更する方法、設定するパラメータとして新しいパスワードを受け入れます

      注:ユーザーが設定した後、オブジェクトのsaveメソッドを呼び出す必要があります       

user.set_password(パスワード= '' 
user.save()

 

  

@login_required
 DEF set_password(リクエスト):
    ユーザー = からrequest.user 
    ERR_MSG = '' 
    もし request.method == ' POST ' 
        OLD_PASSWORD = request.POST.get(' OLD_PASSWORD ''' 
        new_passwordを = request.POST.get(' new_passwordを''' 
        repeat_password = request.POST.get(' repeat_password '''古いパスワードが正しいことを確認してください
        IF user.check_password(OLD_PASSWORD):
             IF  ないnew_passwordを:
                ERR_MSG = ' 新しいパスワードを空にすることはできません' 
            elifの new_passwordを=!repeat_password:
                ERR_MSG = ' 2つのパスワードが一致しない' 
            
                user.set_password(new_passwordを)
                user.save()
                の戻りリダイレクトを(" /ログイン/ " 
            ERR_MSG = ' 古いパスワードの入力エラー' 
    コンテンツ = {
        ' ERR_MSG ' :ERR_MSG、
    } 
    戻り(リクエスト、レンダリング' set_password.html '、コンテンツ)

 

 

 

    プロパティユーザーオブジェクト

      ユーザー名パスワード

      is_staff:ユーザーは、管理者権限のウェブサイトを持っているかどうか

      is_active:ユーザのログインは、Falseに設定され、ユーザーの前提を削除せずにログインからユーザーを停止することができます許可するかどうか

 

  デフォルトのテーブルAUTH_USERを拡張

    フィールドAUTH_USERテーブルがいくつかを持っていた、私が直接使用するために、プロジェクトで使用されるアプローチはなかった、例えば、私は、ユーザーのフィールドの電話番号を格納したい、最初に考えたのは、確かに、テーブルとテーブルとの間に1対1の関連です

    両方のプロジェクト設計のユーザーテーブルのニーズに応じて柔軟にできるように、我々は、モデルクラスの定義から、ビルトインAbstractUserクラスを継承することができ、Djangoは強力な認証システムを使用することができます

django.contrib.auth.models インポートAbstractUserの
 クラスのUserInfo(AbstractUser):
     "" " 
    用户信息表
    """ 
    NID = models.AutoField(PRIMARY_KEY = 真)
    電話 = models.CharField(max_lengthを= 11、ヌル=真、ユニーク= 真)
    
    デフ __str__ (自己):
         戻り self.username

    道によるテーブルの上のビルトインAUTH_USERの拡大した後、私は今、ユーザー認証を行うために、私の新しく定義されたUserInfoテーブルを使用し、settings.pyでDjangoに教えてください、

引用DjangoはUserテーブルが付属して、あなたが設定する必要がある場合に使用して継承 
AUTH_USER_MODEL = アプリケーション名.UserInfoを

    私たちが使用するテーブルに新しい認証システムを指定すると、我々は、データベース内のテーブルを再作成する必要がありますが、テーブルAUTH_USER元のデフォルトを継続して使用することはできません

 

 

 

 

 

 

 

 

 

    

 

おすすめ

転載: www.cnblogs.com/tulintao/p/11565778.html