python-ウェブdjango-フック検証

グローバルフックの検証:

 

「」「  の遠位パッケージ化入力をビューデータの処理、リンクmodulsのデータベースを確認します「」」

閲覧数:

フォーム=ユーザーフォーム(request.POST)オブジェクトをインスタンス化します

Form.cleaned_data#クリーンフィールドと値

Form.errorsの#dict --- { 'フィールド効力エ​​ラー': 'エラー'} ---- form.errors.get( 'エラー電界効果')

form.errors.get( '__ all__')#グローバルフック・エラー・メッセージ

ユーザーフォームのクラス定義:

#はDjangoのインポートフォームから自動的に検証します

django.formsインポートウィジェットから

django.core.exceptionインポートValidationErrorをから

django.core.validatorsからインポートRegexValidator#正则

 

Wid_02 = widgets.PasswordInput(ATTRSは= { 'クラス': 'フォームコントロール'})# 形成パスワード入力ボックス

PWD = forms.CharField(MAX_LENGTH = 6、 MIN_LENGTH = 2、ウィジェット= wid_02、ラベル= ' パスワード'はバリデータ= [RegexValidator( '\ + D'、 'のみデジタル')] error_messages、= { '必要': 「フィールドが'MIN_LENGTH 『を必要としている:』パスワードの長さはより小さくない『:『MAX_LENGTH』、8』パスワードの長さよりも大きくない、18 『』無効『:』パスワードフォーマットエラー' })#制限入力ボックスの

 

ローカルフック--- 入力がデータベースにあるか否かを判定する

デフclean_member_name:

  ヴァル= self.cleaned_data.get( 'ユーザ名')

  RES = Member.objects.filter(ユーザ名= val)で

  もし判定RES:

    リターンヴァル

  エルス:

    ValidationErrorを(「ユーザ名はすでに存在している」)を上げます

グローバルフック(フロントエンドとフロントエンド)

デフXXX:

  パスワード == パスワードを繰り返し

 

HTML:

フォーム形式で:

1

<ためlable = 'PWD'> {{form.username.lable}} </ lable> // 标签名

<P> {{form.username}} <スパンクラス= '' プル右エラー ''> {{form.username.errors.0}} </スパン> </ P>  

// 入力ボックス---- エラーメッセージ

2

<ためlable = 'PWD'> {{form.username.lable}} </ lable> // 标签名

<P>の<input type = 'パスワード' NAME = 'PWD' 値= {{request.POST.pwd}} <スパンクラス= '' プル右エラー ''> {{}} form.username.errors.0 </ span>を</ P>

// request.POST.pwd == request.POST.get( 'PWD')

3:

あなたが追加したくない場合は ERROR_MESSAGEを中国の情報を表示することができます設定で設定を変更

LANGUAGE_CODE = 'ZH-ハンス'

このようなエラーメッセージが自動的に中国に変換され、

 

my_form:

Djangoのインポートフォーム自动验证
から django.forms インポートウィジェット
 から django.core.exceptions インポートValidationErrorをする
 から app01.models インポートメンバー

クラスユーザーフォーム(forms.Form):
     '' '' '' 
    wid_email = widgets.EmailInput(ATTRSの=を{ ' クラス'' フォーム-コントロール' })
    wid_phone = widgets.TextInput(ATTRS = { ' クラス'' フォーム-コントロール' })
    wid_username = widgets.TextInput(ATTRS = { ' クラス'' フォーム-コントロール' })
    wid_displyname = widgets.TextInput(ATTRS = { ' クラス'' フォーム-コントロール' })
    wid_password = widgets.PasswordInput(ATTRS = { ' クラス'' フォーム-コントロール' })
    wid_rpassword = widgets.PasswordInput(ATTRSの= { ' クラス'' フォーム-コントロール' })
    member_email= forms.EmailField(MAX_LENGTH = 120、MIN_LENGTH = 2、ウィジェット= wid_email、ラベル= 'は邮箱'、= {error_messages ' 必要'' 该字段必填' })
    member_tel = forms.CharField(MAX_LENGTH = 13、MIN_LENGTH = 4、ウィジェット= wid_phone、ラベル= ' 手机号'、error_messages = { ' 必要'' 该字段必填' })
    MEMBER_NAME = forms.CharField(MAX_LENGTH = 30、MIN_LENGTH = 2、ウィジェット= wid_username、ラベル= ' 用户名'error_messages = { ' 必要'' 必須このフィールドは' })
    member_nickname = forms.CharField(= 20 MAX_LENGTH、MIN_LENGTH = 2、ウィジェット= wid_displyname、ラベル=である' ニックネーム' = {error_messages、' 必要'' このフィールドは必須' })
    member_pwd =フォーム.CharField(= 30 MAX_LENGTH、MIN_LENGTH = 8、ウィジェット= wid_password、ラベル= ' パスワード'、error_messages、= { ' 必要'' このフィールド必須' })
    r_pwd = forms.CharField(= 30 MAX_LENGTH、MIN_LENGTH = 8、 =ウィジェットwid_rpassword、ラベル= "繰り返しパスワード"、{= error_messages ' 必要'' 该字段必填' })

    DEF clean_member_name(自己):
         '' '' '' 
        のval = self.cleaned_data.get(' MEMBER_NAME ' 
        RES = Member.objects.filter(MEMBER_NAME = val)で
         印刷(RES)
         の場合 ではないRES:
             返すヴァルの
         返す ValidationErrorを(' !用户名已存在' 

    デフクリーン(自己を
        ):''」「「」
        member_pwd = self.cleaned_data.get(' member_pwd ' 
        r_pwd = self.cleaned_data.get(' r_pwd ' 場合 member_pwd r_pwd:
             もし member_pwd == r_pwd:
                 返すself.cleaned_data
             他を返す ValidationErrorを(两次密码不一致を!" それ以外リターン self.cleaned_data

 

ビュー:

django.shortcuts インポート、レンダリングのHttpResponse、リダイレクト
 から app01.models インポート *
 から app01.my_form インポートユーザーフォーム
 インポートJSON 

DEF (要求)を登録する:
     '' '' '' 
    のRES = { ' S ':なし、' 情報' :なし}
     印刷(request.POST)
     場合 request.method == ' POST ' 
        フォーム = ユーザーフォーム(request.POST)
         プリント(形)
         印刷(form.errors)
         プリント(1 場合 ではないform.is_valid():
            RES [ ' S ' ] = 0 
            RES [ ' 情報' ] = form.errors
             プリント(2 リターンのHttpResponse(json.dumps(RES))
        電子メール = request.POST.get(' member_email ' 印刷(Eメール)
        電話 = request.POST.get(' member_tel ' 
        、ユーザー名= request.POST.get(' MEMBER_NAME ' 
        displyname = request.POST.get(' member_nickname ' 
        パスワード = request.POST.get(' member_pwd ' 
        member_obj = Member.objects.create(member_email =メール、member_tel =電話、MEMBER_NAME =名、member_nickname = displyname、member_pwd = パスワード)
         プリント(3 場合member_obj:
            RES [ ' S ' ] = 1つの
            RES [ ' 情報' ] = '注册成功' 
        
            RES [ ' S ' ] = 2つの
            RES [ ' 情報' ] = ' 注册失败' 
        応答 = のHttpResponse(json.dumps(RES))
        ますrequest.session [ ' ユーザ名" ] = member_obj.member_name 
        ますrequest.session 【' MEMBER_ID ' =] member_obj.id
         プリント(4 リターン応答

    リターンがレンダリング(リクエスト、' app01_enroll.html '、地元の人々())

 

おすすめ

転載: www.cnblogs.com/person1-0-1/p/11367750.html