2016-10-28 7 views
0

私はdjango-registration「は現在、以下のように見えるのRegistrationFormUniqueEmail形式:Django登録フォームを送信した後にパスワードを取得する方法は?

class RegistrationFormUniqueEmail(RegistrationForm): 
    """ 
    Subclass of ``RegistrationForm`` which enforces uniqueness of 
    email addresses. 

    """ 
    def clean_email(self): 
     """ 
     Validate that the supplied email address is unique for the 
     site. 

     """ 
     if User.objects.filter(email__iexact=self.cleaned_data['email']): 
      raise forms.ValidationError(validators.DUPLICATE_EMAIL) 
     return self.cleaned_data['email'] 

私はパスワードが数字や特殊文字を持っているかどうかを確認するフォームを実装したいが、私は」を編集しようとしていますパスワードを取得できませんでしたか?私もそれが可能かどうかは分かりませんが、パスワードを取得しようとしたのはここにあります:

self.cleaned_data['id_password2'] 
self.cleaned_data['password2'] 
self.cleaned_data['password'] 
self.cleaned_data.get('id_password2') 
self.cleaned_data.get('password2') 
self.cleaned_data.get('password') 

これらのすべてがNoneTypeオブジェクトを返します。

また、私はclean_password2機能を定義しようとしましたが、助けがありませんでした。これは実行可能ですか?そしてどうですか?任意の助け

おかげで、

答えて

1

クリーンデータは、フォームを作成するときに、フォーム上の()をIS_VALID呼び出すとき、それが追加された属性ではありません。

is_valid()は、データをフォーム作成時に指定した制約に準拠しているかどうかをチェックします(この場合は、RegistrationFormUniqueEmailではデフォルトでパスワードと固有の電子メールが一致します)。それはIS_VALIDを(上書きする意味をなす)またはパスワード強度に追加チェックを実行するのではなく、標準的な手順

def custom_is_valid(self): 
    valid = self.is_valid() 
    if password.is.not.secure(): 
     self.add_error('password', ValidationError(('Insecure Password'), code='invalid')) 
     valid = False 
    return valid 

上記スニップがかもしれない外の追加検証を行うことに加えて、()IS_VALID呼び出す別の関数を作成することがありますトリックを行う。エラーを追加する際の文字列 'password'は、あなたが指定したフォームフィールドにそれを置きます。あなたが使用しているフォームのビルドのフィールド名だと思うので、password1またはpassword2を使用します。また、パスワードの有効性をチェックするためにcleaned_dataを使用しないでください。データ属性form.data ['password']を使用するだけです

+0

ありがとうございました!そして 'custom_is_valid'関数をどのようにアクティブにするのですか?フォームが送信された後に呼び出されるように、この関数を何とかバインドする必要があると思いますか? – jeff

+0

あなたはそれを手動で呼び出す必要があります –

+0

ありがとう、ありがとう。私はちょうど既にそこにあった 'clean_email'関数の中で自分のチェックを実装しました。私は方法がわからないが、フォームが送信された後に呼び出されるので、私は一度に2つのフィールドをチェックする:) – jeff

関連する問題