フォームクロスサイトリクエストフォージェリで使用されるフォーム
{%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元のデフォルトを継続して使用することはできません