グローバルフックの検証:
「」「 の遠位パッケージ化入力を、ビューデータの処理、リンク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 '、地元の人々())