パイソン - ジャンゴ - フォームカスタム検証コンポーネント

reg2.html:

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <メタ文字コード= "UTF-8"> 
    <タイトル>注册页面</ TITLE> 
    <リンクのrel = "スタイルシート"のhref = "/静的/ストラップ/ CSS / bootstrap.min.css "> 
</ head> 
<body> 

<DIV CLASS ="コンテナ"> 
    <DIV CLASS ="行"> 
        <DIV CLASS =" COL-MD-6 COL-MD-オフセット-3" > 
            <FORM ACTION = "/ REG2 /" METHOD = "POST" NOVALIDATE> 
                {%csrf_token%} 
                <DIVクラスは= "フォーム基{%form_obj.username.errors.0%があれば} {%ENDIF%}エラーを有しています「> 
                    {{form_obj.username。 
                </ div>ラベル}} 
                    、{{}} form_obj.username
                    <スパンクラス= "ヘルプブロック"> {{form_obj.username.errors.0}} </ span>を
                <DIV CLASS = "フォーム基{%form_obj.password.errors.0%があれば} {%誤差を有していますENDIFの%} "> 
                    {{form_obj.password.label}} 
                    、{{form_obj.password}} 
                    <スパンクラス="ヘルプブロック"> {{form_obj.password.errors.0}} </スパン> 
                </ div> 
                <DIV CLASS = "フォーム基{%form_obj.re_password.errors.0%があれば} {%ENDIF%}エラーを有する"> 
                    {{form_obj.re_password.label}} 
                    、{{form_obj.re_password}} 
                    <スパンクラス= "ヘルプ・ブロック"> {{form_obj.re_password。errors.0}} </ span>を
                </ div> 
                <DIV CLASS = 「フォーム基{%form_obj.mobile.errors場合。0%} "{%ENDIF%}エラーを有しています>
                    {{form_obj.mobile.label}} 
                    、{{form_obj.mobile}} 
                    <スパンクラス= "ヘルプブロック"> {{form_obj.mobile.errors.0}} </スパン> 
                </ div> 
                <P> <INPUTタイプ= "提出"クラス= "BTN BTN-デフォルト"> </ P> 
            </ FORM> 
        </ div> 
    </ div> 
</ div> 

</ BODY> 
</ HTML>

表示forms.pyソース

 

バックキーでcleaned_data名である一方で、clean_始まる関数が存在する場合、関数が実行されます

views.py:

django.shortcutsからのHttpResponse、レンダリングインポート
app01輸入モデルから

Djangoのインポートフォームから
django.formsからウィジェットをインポート
django.core.validatorsからRegexValidatorをインポート
django.core.exceptionsからValidationErrorをインポート


クラスRegForm(forms.Form):
    ユーザ名=フォームを。 CharFieldです(
        MIN_LENGTH = 5、
        ラベル= "用户名"、
        = error_messages { 
            "MIN_LENGTHを": "用户名不能小于5位!"、
            "必要": "该字段不能为空" 
        }、
        ウィジェット= widgets.TextInput(ATTRS = { "クラス": "フォームコントロール"}) 

    パスワード= forms.CharField(
        MIN_LENGTH = 6、
        ラベル=「パスワード」
        error_messages = { 
            "MIN_LENGTH": "6パスワード未満ではない!"、
            "必須": "このフィールドは空白にすることはできません" 
        }、
        ウィジェットは= widgets.PasswordInput(ATTRSの= { "クラス": "フォームコントロール"}、 =真render_value) 

    re_password = forms.CharField(
        MIN_LENGTH = 6、
        ラベル= "パスワードの確認" 
        error_messages、= { 
            "必須": "このフィールドは空白にすることはできません" 
        }、
        ウィジェット= widgets.PasswordInput(ATTRS = { "クラス" "フォームコントロール"}、render_value = TRUE) 

    モバイル= forms.CharField(
        LABEL = "電話番号"
        カスタム#正規マッチングルール
        バリ= [ 
            RegexValidator(R&LT「^ [0-9] + $」、「電話番号「が数値でなければならない)、#は、デジタル携帯電話番号か否かを判断します
            RegexValidator(R '^ 1 [3-9 ] [0-9] {9} $'、 " 携帯電話のフォーマットエラー")は、電話番号が#1と始まる11ビットであるか否かを判断3-9  
        ]、
        error_messages、= { 
            "必要な":"このフィールドは空白にすることはできません" 
        }、
        ウィジェットは= widgets.TextInput(ATTRSの= {"クラス":"フォームコントロール「}) )

    ユーザ名情報決定
    DEFのclean_username(セルフ):
        値= self.cleaned_data .get( "ユーザ名")
        値は"ADMIN" IF:
            昇給ValidationErrorを( "ユーザ名が機密情報を含むことができません")


DEF REG2(リクエスト):
    form_obj regform =()#GETリクエスト

    request.method場合== "POST":
        form_obj = regForm(要求。POST) 
        #は、私たちが検証を支援する形をしましょう
        )form_obj.is_valid IF(: チェックすることにより場合
            form_obj.cleaned_dataすべてのデータがチェックに保管された後、#cleaned_data 
            プリント(form_obj.cleaned_data)
            models.UserInfo.objects.create(** form_obj.cleaned_data)
            リターンのHttpResponse( "注册成功")

    のレンダリングを返す(リクエスト、 "reg2.htmlを" { "form_obj"は:form_obj})

クラス決意処理のユーザ名を形成するための機能を追加しClean_username

結果:

 

 

クリーン親クラスのメソッドをオーバーライドします:

ソースの表示forms.py

 

ここできれいな方法は唯一何も操作しない途中で、前回にcleaned_dataを返さ

views.py:

django.shortcutsからのHttpResponse、レンダリングインポート
app01輸入モデルから

Djangoのインポートフォームから
django.formsからウィジェットをインポート
django.core.validatorsからRegexValidatorをインポート
django.core.exceptionsからValidationErrorをインポート


クラスRegForm(forms.Form):
    ユーザ名=フォームを。 CharFieldです(
        MIN_LENGTH = 5、
        ラベル= "用户名"、
        = error_messages { 
            "MIN_LENGTHを": "用户名不能小于5位!"、
            "必要": "该字段不能为空" 
        }、
        ウィジェット= widgets.TextInput(ATTRS = { "クラス": "フォームコントロール"}) 

    パスワード= forms.CharField(
        MIN_LENGTH = 6、
        ラベル=「パスワード」
        error_messages = { 
            "MIN_LENGTH": "6パスワード未満ではない!"、
            "必須": "このフィールドは空白にすることはできません" 
        }、
        ウィジェットは= widgets.PasswordInput(ATTRSの= { "クラス": "フォームコントロール"}、 =真render_value) 

    re_password = forms.CharField(
        MIN_LENGTH = 6、
        ラベル= "パスワードの確認" 
        error_messages、= { 
            "必須": "このフィールドは空白にすることはできません" 
        }、
        ウィジェット= widgets.PasswordInput(ATTRS = { "クラス" "フォームコントロール"}、render_value = TRUE) 

    モバイル= forms.CharField(
        LABEL = "電話番号"
        カスタム#正規マッチングルール
        バリ= [ 
            RegexValidator(R&LT「^ [0-9] + $」、「電話番号「が数値でなければならない)、#は、デジタル携帯電話番号か否かを判断します
            RegexValidator(R '^ 1 [3-9 ] [0-9] {9} $'、 " 携帯電話のフォーマットエラー")は、電話番号が#1と始まる11ビットであるか否かを判断3-9  
        ]、
        error_messages、= { 
            "必要な":"このフィールドは空白にすることはできません" 
        }、
        ウィジェットは= widgets.TextInput(ATTRSの= {"クラス":"フォームコントロール「}) )

    ユーザ名情報決定
    DEFのclean_username(セルフ):
        値= self.cleaned_data .get(「ユーザ名」)
        値は「ADMIN」IF:
            昇給ValidationErrorを(「ユーザ名が機密情報を含むことができません」) 
きれいな親クラスをオーバーライド
    DEFクリーン(セルフ):
        パスワード= self.cleaned_data.get(「パスワード")
        re_password = self.cleaned_data.get(" re_password ") 
        !re_password場合=パスワード:
            self.add_error( "パスワード"、ValidationErrorを( " パスワード倍矛盾")) 
            」self.add_error(re_password "ValidationErrorを(" パスワード倍矛盾「))
            ValidationErrorを( "パスワード倍矛盾")上げ
        リターンself.cleaned_dataの


:DEFのREG2(リクエスト)
    form_obj regform =()#GETリクエスト

    :request.method IF == "POST" 
        form_obj = regform(request.POST)
        できるように#のフォームを私たちは、検証に役立つ
        ()form_obj.is_valid場合:
            #場合はチェックで
            #すべてのデータがform_obj.cleaned_dataチェックに保管された後の
            印刷(form_obj.cleaned_data)
            models.UserInfo.objects.create(** form_obj.cleaned_data)
            HttpResponseを返す( "登録が成功した")

    レンダリングを返す(要求、 "reg2.html"、{ "form_objを":form_obj})

きれいなフォームクラスで親クラスの再構成方法、パスワードの一部を確認します

これらのパスワードが異なる場合は、結果:

 

おすすめ

転載: www.cnblogs.com/sch01ar/p/11498962.html