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})
きれいなフォームクラスで親クラスの再構成方法、パスワードの一部を確認します
これらのパスワードが異なる場合は、結果: