1.5 博客系统| 钩子的作用

 

forms组件的局部钩子与全局钩子的应用

views.py

from blog.Myforms import UserForm  #引入即可

Myforms.py

#Author:Kris

from django import forms
from django.forms import widgets

from blog.models import UserInfo
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError

class UserForm(forms.Form):
    user=forms.CharField(max_length=32,
                         error_messages={"required": "该字段不能为空"},
                         label="用户名", widget=widgets.TextInput(attrs={"class":"form-control"},))
    pwd = forms.CharField(max_length=32,label="密码", widget=widgets.PasswordInput(attrs={"class":"form-control"},))
    re_pwd = forms.CharField(max_length=32,label="确认密码", widget=widgets.PasswordInput(attrs={"class":"form-control"},))
    email = forms.EmailField(max_length=32,label="邮箱", widget=widgets.EmailInput(attrs={"class":"form-control"},))

    def clean_user(self):
        user=self.cleaned_data.get("user")
        UserInfo.objects.filter(username=user).filter()
        if not user:
            return user
        else:
            raise ValidationError("该用户已注册")

    def clean(self):  #全局钩子
        pwd = self.cleaned_data.get("pwd")
        re_pwd = self.cleaned_data.get("re_pwd")
        if pwd == re_pwd:
            return self.cleaned_data
        else:
            raise ValidationError("两次密码不一致")  #全局错误

register.py

$.ajax({
            url:"",
            type:"post",
            contentType:false,  //要加两个参数不然会报错;数据的编码类型
            processData:false, //只要是formdata都要加这两个参数
            data: formdata,
            success: function (data) {
                console.log(data);
                if(data.user){
                    //注册成功
                }
                else{//注册失败
                    //console.log(data.msg)
                    $("span.error").html(""); //清空错误信息
                    $(".form-group").removeClass("has-error");
                    //展示此次提交的错误信息
                    $.each(data.msg, function(field, error_list){
                        console.log(field, error_list);

                        if (field == "__all__"){   //处理全局错误信息;下面找到它的标签,父标签给它加上
                            $("#id_re_pwd").next().html(error_list[0]).parent().addClass("has-error");
                        }

                        $("#id_"+field).next().html(error_list[0]);  //每次循环都把各自的信息放到input那下面了
                        $("#id_"+field).parent().addClass("has-error");
                    })

                }
            }
        })
    })

猜你喜欢

转载自www.cnblogs.com/shengyang17/p/9388201.html
1.5
今日推荐