フォームジャンゴのコンポーネント

まず、元の登録チェック

リア
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}} </スパン>
  1. フロントエンドインターフェースは、HTMLフロントエンドのコードを生成>>>フォームページのフォームがあり、登録されています
  2. バックエンドにデータを送信できるようにするためのフォームフォームは、バックエンドのデータ妥当性検査の有効性を確認ください>>>
  3. メッセージは、ページ>>>バックにプレゼンテーションをチェックし、情報の表示を確認してください

  検査データ:フロントエンドを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 #のデータ検証ルールの遵守は、オブジェクトに置かれます

ルールチェックデータフォームコンポーネント

  1. パリティの値からダウン順
  2. チェックがcleaned_dataに渡されます
  3. エラーへの検証の失敗
  4. すべてのフォームフィールドは、すべてのデフォルト値を渡す必要があります(=真を必須)
  5. あなたが渡すことができたときにデータをチェック(マルチパスデータは任意のチェックを行うことはありません、検証ルールは、フォームには影響しません)
遠位は、チェックキャンセル 
<フォームアクション= ""メソッド= " 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    

おすすめ

転載: www.cnblogs.com/moonzier/p/11247109.html