まず、元の登録チェック
#リア DEF realreg(要求): 誤差 = { ' ユーザ名':'' 、' パスワード':'' } #辞書記憶エラーを定義 IF request.method == ' POST ' : 名 = request.POST.get (' ユーザ名' ) パスワード = request.POST.get(' パスワード' ) IF LEN(パスワード)<6。 : エラー[ ' パスワード'] =' 密码不能小于6位' 戻り(リクエスト、レンダリング' reg.html ' { ' エラー' :エラー}) #前端 の<input type = ' テキスト' NAME = ' ユーザ名' > <スパン> {{error.usernameを} } </スパン> の<input type = ' テキスト' NAME = ' パスワード' > <スパン> {{error.password}} </スパン>
- フロントエンドインターフェースは、HTMLフロントエンドのコードを生成>>>フォームページのフォームがあり、登録されています
- バックエンドにデータを送信できるようにするためのフォームフォームは、バックエンドのデータ妥当性検査の有効性を確認ください>>>
- メッセージは、ページ>>>バックにプレゼンテーションをチェックし、情報の表示を確認してください
検査データ:フロントエンドをJSコードチェック(オプション)、後端によってコードをチェックする(しなければならない)、フロントとリアは、一般的にチェックします終了します。
二、フォームコンポーネント
2.1の機能
- タグをレンダリング
- データをチェック
- 情報を表示
- 情報を確認します
2.2フォームクラス
ステップ1:カスタムクラスを形成します
ジャンゴインポートフォームの クラスMyFormを(forms.Form): 名前 = forms.CharField(max_lengthを= 6 ) パスワード = forms.CharField(max_lengthを= 8、MIN_LENGTH = 3 ) 電子メール = forms.EmailField(=真を必須)
ステップ2:フォームオブジェクトがインスタンス化
= MyFormをするform_obj({ ' 名称':' moonzier '、' パスワード':' 123 '、' メールに':' [email protected] ' }) #着信辞書
ステップ3:データ検証の合法性を確認します
form_obj.is_valid() #すべてのフィールドが小切手であるのみTrueを返します
ステップ4:検証エラーメッセージを確認してください
form_obj.errorsの#フィールドエラーを置くと、すべてのチェックサムを通過しない "「」 { 『name』が:[『Ensure®は、AT MOSTこの値を持っている6つの文字(ITが持っている7)。。』]、 『パスワード』: [「Ensure®少なくともこの値を持っている3つの文字(IT 2を有している)。」]、 『メールに』:[ 『電子メールアドレスの有効な入力します』] } 『』 "
ステップ5:を介してデータの検証をチェック
form_obj.cleaned_data #のデータ検証ルールの遵守は、オブジェクトに置かれます
ルールチェックデータフォームコンポーネント
- パリティの値からダウン順
- チェックがcleaned_dataに渡されます
- エラーへの検証の失敗
- すべてのフォームフィールドは、すべてのデフォルト値を渡す必要があります(=真を必須)
- あなたが渡すことができたときにデータをチェック(マルチパスデータは任意のチェックを行うことはありません、検証ルールは、フォームには影響しません)
#遠位は、チェックキャンセル <フォームアクション= ""メソッド= " POST " NOVALIDATE> </ form>を
2.3レンダリングのラベル
フォームコンポーネントのみを使用すると、ユーザーが入力したラベルを取得助けをレンダリングし、あなたが送信ボタンをレンダリングする助けにはなりません、手動で追加する必要があります。
最初:貧しいスケーラビリティ
Form_obj.as_p} {} { <! - A <P>でレンダリングタグ- > {} {} form_obj.as_ul
第二:手書きずつ
< フォームアクション= "" > < P > {{{{form_obj.name form_obj.name.label}}}} </ P > <! - name属性の後端部が定義されていない場合、そのフィールドは大文字に最初の文字でありますラベル値として- > < P > {{{{form_obj.password form_obj.password.label}}}} </ P > < P > {{{{form_obj.email form_obj.email.label}}}} < / P > < INPUTの種類= "送信" > </ フォーム>
第三:forループ
< フォームアクション= "" > {form_obj%でfooの%} < P > {{foo.label}}、{{FOO}} </ P > {%ENDFOR%} </ フォーム>
2.4 [設定]タブのスタイル
場合、パターンフィールドで提供されるクラスのフォーム定義。
ジャンゴインポートフォーム から `` django.forms`` インポートウィジェット パスワード = forms.CharField(= MAX_LENGTH 8 、 MIN_LENGTH。= 3 、 error_messages、 = { ' MAX_LENGTH ':' パスワードの最大8 ' 、 ' 必要':' パスワードを空にすることはできません' 、 「MIN_LENGTH 」:" パスワードを少なくとも3' }、 ウィジェット = widgets.PasswordInput(ATTRSの= { ' クラス':' C1制御フォーム' })) #widgets.PasswordInput暗号文でパスワード、ATTRフィールドを増やし
統合されたケース
#リア #は、フォームクラス定義 クラスをMyFormを(forms.Form): 名前 = forms.CharField(MAX_LENGTH = 6 、 ラベル = ' ユーザ名'、 #遠位ラベルタグラベルは、得られた値属性 error_messagesを、= { ' MAX_LENGTH ':' 最長6ユーザ名「」必要「:」ユーザー名は空にすることはできません" } #カスタム・エラー・メッセージが、中国語に変更することができる ) DEF REG(リクエスト): #は空のオブジェクト生成 form_obj = MyFormを() IF request.method == ' POST ' : form_obj)= request.POSTのMyFormをする( #request.POSTのです辞書は、自動的に着信データをチェックし、データエラーが発生明確ではない IF ()form_obj.is_valid: models.User.objects.create( ** form_obj.cleaned_data) #をモデル検査テーブルフォーム成分データを用いて時間、だけで一貫性のあるフィールドを確保するための オブジェクトを作成するときに直接** form_obj.cleaned_data 返す(要求、レンダリング「reg.html 」)(地元の人々については、)
#前端 <FORM ACTION = ""メソッド= " ポスト" NOVALIDATE> {%ため FOO で form_obj%} <P> {{foo.label}}、{{FOO}} <スパン> {{}} foo.errors.0 </スパン> #只取第一个错误 </ P> {%ENDFOR%} の<input type = " 送信" > </ FORM>
第三に、フック関数
ローカルフック関数(ローカルパリティフック関数を使用して単一のフィールド)
#場合は666に表示されるエラーに名前欄をチェックしてください DEFのclean_name(セルフ): 名前 = self.cleaned_data.get(「名前」) のIF 「666 」 に名前: self.add_error(「名前」、" 光は666を呼び出すのに十分ではありません、本当の力がなければならない!" ) を返す名前#のリターンをまたは追加するには、互換性に関する考慮事項
(検証フィールドグローバルフック関数を複数用いて)グローバルフック関数
#のパスワードとconfirm_password一貫した、エラー時にパリティが矛盾して DEF :クリーン(自己) パスワード = self.cleaned_data.get(' パスワード' ) confirm_password = self.cleaned_data.get(' confirm_password ' ) IF ないパスワード== confirm_password: セルフ.add_error(' confirm_password '、" 2つのパスワードが一致しない!" ) の戻り self.cleaned_data