GVKun编程网logo

form的valid验证的原理(form.valid)

34

在本文中,我们将为您详细介绍form的valid验证的原理的相关知识,并且为您解答关于form.valid的疑问,此外,我们还会提供一些关于中的value为空字符串不显示的问题、bootstrapVa

在本文中,我们将为您详细介绍form的valid验证的原理的相关知识,并且为您解答关于form.valid的疑问,此外,我们还会提供一些关于的value为空字符串不显示的问题、bootstrapValidator form表单验证、CKEditor无法验证的解决方案(js验证+jQuery Validate验证)、django form.errors 显示“此字段是必需的!”使用 form.isvalid 运行模型表单验证后的有用信息。

本文目录一览:

form的valid验证的原理(form.valid)

form的valid验证的原理(form.valid)

form的valid验证的原理

import re
import copy


class ValidateError(Exception):
    def __init__(self,detail):
        self.detail = detail



# ###################### 插件
class TextInput(object):
    def __str__(self):
        return "<input type=''text'' />"

class EmailInput(object):
    def __str__(self):
        return "<input type=''email'' />"




# ###################### 内部包含正则,用于验证
class Field(object):
    def __init__(self,required=True,error_messages=None,widget=None):
        self.required = required
        self.error_messages = error_messages
        if not widget:
            self.widget = TextInput()
        else:
            self.widget = widget
    def __str__(self):
        return str(self.widget)

class CharField(Field):

    def valid(self,val):
        if self.required:
            if not val:
                msg = self.error_messages[''required'']
                raise ValidateError(msg)
        return val


class EmailField(Field):
    REG = "^\w+@\w+$"

    def valid(self,val):
        if self.required:
            if not val:
                msg = self.error_messages[''required'']
                raise ValidateError(msg)
        result = re.match(self.REG,val)
        if not result:
            msg = self.error_messages.get(''invalid'',''格式错误'')
            raise ValidateError(msg)
        return val





# ###################### Form,获取用户提交内容+获取定义的字段对象
class Form(object):

    def __init__(self,data=None):
        # 获取派生类中的所有静态字段
        # print(self.__class__.__dict__)
        self.data = data
        self.fields = copy.deepcopy(self.__class__.declare_field)
        self.cleaned_data = {}
        self.errors = {}

    def __new__(cls, *args, **kwargs):
        declare_field = {}
        for field_name, field in cls.__dict__.items():
            if isinstance(field,Field):
                declare_field[field_name] = field
        cls.declare_field = declare_field
        return object.__new__(cls)

    def is_valid(self):
        # 用户提交的数据
        # self.data # {"username":"alex","pwd":18,''xxx'':11}
        # self.fields # {"username":CharField(), "pwd": EmailField() }
        for field_name,filed in self.fields.items():
            try:
                input_val = self.data.get(field_name)
                val = filed.valid(input_val)
                method = getattr(self,"cleaned_%s" %field_name,None)
                if method:
                    val = method(val)
                self.cleaned_data[field_name] = val
            except ValidateError as e:
                self.errors[field_name] = e.detail

        return len(self.errors) == 0

    def __iter__(self):

        return iter(self.fields.values())

class UserForm(Form):
    username = CharField(error_messages={''required'':''用户名不能为空''},widget=TextInput())
    pwd = EmailField(error_messages={''required'':''密码不能为空'',''invalid'':''密码格式错误''},widget=EmailInput())



# ############### 应用
obj = UserForm(data={"username":"sdf","pwd":"sdf",''xxx'':666})
if obj.is_valid():
    print(''验证成功'',obj.cleaned_data)
else:
    print("验证失败",obj.errors)


# ##################### HTML #####################
for x in obj:
    print(x)

 

的value为空字符串不显示的问题" alt="的value为空字符串不显示的问题">

的value为空字符串不显示的问题">的value为空字符串不显示的问题

<tr>
	<td align="right">属性名:</td>
	<td align="left">
	    <form:select path="property">
            <!--这里1和0的都能正常显示,但空字符串的不显示,表格页面使用js判断value == null || value == "" 的可以正常显示,这好像不能用null。还有什么办法吗? -->
            <form:option value="">未办理</form:option>
	        <form:option value="1">成功</form:option>
	        <form:option value="0">失败</form:option>
	    </form:select>
	</td>
</tr>

 

bootstrapValidator form表单验证

bootstrapValidator form表单验证

1:引入相应的css和js

      css:

      <link href="<%=path%>/css/bootstrap.min.css" rel="stylesheet" type="text/css" />

     <link href="<%=path%>/css/bootstrapValidator.min.css" rel="stylesheet" type="text/css">


       js:

      <script src="<%=path%>/js/jquery.min.js" type="text/javascript"></script>

    <script src="<%=path%>/js/bootstrap.min.js" type="text/javascript"></script>

     <script src="<%=path%>/js/bootstrapValidator.min.js"></script>


2:相应的html代码:

<form id="formAddpic" method="post"  action="${pageContext.request.contextPath}/activity/addpic.shtml">
					<div >
						<label for="picName" >姓名:</label>
						<div >
							<input type="text"  id="picName" name="picName" placeholder="姓名">
						</div>
					</div>
					<div >
						<label for="picDepartment" >部门:</label>
						<div >
							<input type="text"  id="picDepartment" name="picDepartment" placeholder="部门">
						</div>
					</div>
					<div >
						<label for="picPhone" >手机:</label>
						<div >
							<input type="text"  maxLength="11" id="picPhone" name="picPhone" placeholder="手机">
						</div>
					</div>
					<div >
						<label for="picEmail" >邮箱:</label>
						<div >
							<input type="email"  id="picEmail" name="picEmail" placeholder="邮箱">
						</div>
					</div>
				       <div >
         <div >
            <button type="submit" id="setpicbtn" >确认</button>
         </div>
     </div>
				</form>

  


3:js代码:

       

$(function() {
var formAddpic = $(''#formAddpic'');
$("#setpicbtn").bind("click", function() {
formAddpic.submit()
});
formAddpic.bootstrapValidator({
message : ''输入有误'',
feedbackIcons : {
valid : ''glyphicon glyphicon-ok'',
invalid : ''glyphicon glyphicon-remove'',
validating : ''glyphicon glyphicon-refresh''
},
fields : {
picName : {
validators : {
notEmpty : {
message : ''负责人不能为空''
}
}
},
picDepartment : {
validators : {
notEmpty : {
message : ''部门不能为空''
}
}
},
picPhone : {
validators : {
notEmpty : {
message : ''手机号码 必须填写''
},
regexp : {
regexp : /^\d{11}$/,
message : ''手机号码为11位数字''
}
}
},
picEmail : {
validators : {
notEmpty : {
message : ''邮箱不能为空''
},
emailAddress : {
message : ''不是合法的邮件''
}
}
}
}
}).on(
''success.form.bv'',
function(e) {
e.preventDefault();
var $form = $(e.target);
$.post($form.attr(''action''), $form.serialize(),
function(result) {
$("#addpic").modal("hide");
$("#tablePic").bootstrapTable("refresh");
}, ''json'');
})
});

4:

CKEditor无法验证的解决方案(js验证+jQuery Validate验证)

CKEditor无法验证的解决方案(js验证+jQuery Validate验证)

最近项目的前端使用了jQuery,表单的前端验证用的是jQuery Validate,用起来很简单方便,一直都很满意的。

前段时间,根据需求为表单中的 textarea 类型的元素加上了html富文本编辑器,用的是CKEditor,功能强大,定制方便,也很满意。

不过用CKEditor增强过的 textarea 元素,这个字段要求是非空的,在jQuery Validate总是验证不通过,原因就是在 CKEditor 编辑器填写了内容之后,编辑器并不是立即把内容更新到原来的 textarea 元素中的,我没仔细看源代码,试过一种情况就是每一次提交不通过,第二次提交就可以通过的,貌似编辑器是在 submit 事件之前把编辑器的内容更新到 textarea 中的(这个是猜测,不知道对不对,我对jQuery 和 CKEditor 都不太熟悉,算是拿来就用,有问题就放狗的那种)。

于是在网上找到了解决问题的代码,代码不是我写的,我只是记录一下我遇到的问题,代码非原创。原理就是当编辑器更新了内容之后,立即把内容更新到 textarea 元素。

rush:js;"> CKEDITOR.instances["page_content"].on("instanceReady",function() { //set keyup event this.document.on("keyup",updateTextArea); //and paste event this.document.on("paste",updateTextArea);
}); 

function updateTextArea() 
{ 
    CKEDITOR.tools.setTimeout( function() 
          {  
            $("#page_content").val(CKEDITOR.instances.page_content.getData()); 
            $("#page_content").trigger('keyup'); 
          },0);  
} 

目前一切使用正常,算是解决了一个让我头痛的问题。

另一种解决思路:

CKEditor 编辑器是增强过的 textarea 元素,在填写了内容之后,编辑器并不立即把内容更新到原来的 textarea 元素中的,而是等到 submit 事件之前把编辑器的内容更新到 textarea 中. 因此,普通的js验证或是jquery validate验证都获取不到编辑器的值.)

1.js验证 获取CKEditor 编辑器的值其实很容易,其值就是CKEDITOR.instances.mckeditor.getData(),实例代码如下:

rush:js;">

此段代码放在编辑器控件之下即可.完整实例如下:

rush:js;"> Box ID="mckeditor" runat="server" TextMode="MultiLine" Width="98%" Height="400px" Css>

以上就是解决CKEditor无法验证的两种方案,相信大家和小编一样都有所收获,谢谢大家的阅读。

django form.errors 显示“此字段是必需的!”使用 form.isvalid 运行模型表单验证后

django form.errors 显示“此字段是必需的!”使用 form.isvalid 运行模型表单验证后

如何解决django form.errors 显示“此字段是必需的!”使用 form.isvalid 运行模型表单验证后?

所以我试图让 django 模型表单只通过 REGEX 接受字母数字输入,如下所示:

class AddDeadCoin(forms.ModelForm):


class Meta:
    model = DeadCoin
    fields = (
        ''category'',''is_coin'',''name'',''ticker'',''founder'',''total_coins_or_tokens'',''no_exchanges'',''project_start_date'',''project_end_date'',''social_end_date'',''logo'',''screenshot'',''notes'',''links'',)



def clean_name(self):
    name = self.cleaned_data.get(''name'')
    if bool(re.match(r''^[A-Za-z0-9_-]+$'',str(name))):
        return name
    else:
        raise forms.ValidationError("Sorry,you can only have alphanumeric,_ or - in username")



def save(self):

    instance = super(AddDeadCoin,self).save(commit=False)

    instance.slug = orig = slugify(instance.name)

    for x in itertools.count(1):
        if not DeadCoin.objects.filter(slug=instance.slug).exists():
            break
        instance.slug = ''%s-%d'' % (orig,x)
    instance.save()
    return instance

但是,在尝试提交任何输入(有效和无效)时,我收到“此字段是必需的!”表单.错误消息。准确地说,我收到了两次消息。需要注意的是,''name'' 和 ''ticker'' 字段是必需的。

这是我的模型的样子:

class DeadCoin(models.Model):
name = models.CharField(max_length=70,default=None)
summary = models.TextField(blank=True,null=True,default="Dead Coin Summary")
ticker = models.CharField(max_length=20,default=None)
founder = models.CharField(blank=True,max_length=50)
is_coin = models.BooleanField(blank=True,default=True)
notes = models.TextField(blank=True,default='''')
links = models.TextField(blank=True,default='''')
total_coins_or_tokens = models.CharField(blank=True,max_length=50,default=''UnkNown'')
no_exchanges = models.BooleanField(blank=True,default=True)
project_start_date = models.CharField(blank=True,max_length=10,default=''2018'')
project_end_date = models.CharField(blank=True,default=''2019'')
social_end_date = models.CharField(blank=True,default=''2019'')
no_website = models.BooleanField(blank=True,default=True)
logo = models.ImageField(blank=True,upload_to = ''img/logo/'',default = ''img/logo/no-logo.jpg'')
screenshot = models.ImageField(blank=True,upload_to = ''img/'',default = ''img/logo/no-logo.jpg'')
category = models.CharField(max_length=50,default="Abandoned or No Volume")
slug = models.SlugField(unique=True)
pending = models.BooleanField(default=False)

def save(self,*args,**kwargs):
    self.summary=self.summary.strip(''<p>'').strip(''</p>'')
    if not self.slug:
        slug_mix=self.name
        self.slug = slugify(slug_mix)
    super(DeadCoin,self).save(*args,**kwargs)

def get_absolute_url(self):
    return reverse(''deadcoin'',args=(self.slug,))

def __str__(self):
    return self.name

这就是我的观点:

def dead_coins(request):


if request.method == ''POST'':
    form = AddDeadCoin(data=request.POST or None)
    
    publish=request.POST.get(''publish'','''')
    delete=request.POST.get(''delete'','''')
    category=request.POST.get(''category'','''')
    is_coin=request.POST.get(''selector'','''')
    coinname=request.POST.get(''coinname'','''')
    cointicker=request.POST.get(''cointicker'','''')
    totalcoins=request.POST.get(''totalcoins'',None)
    no_exchange=request.POST.get(''ex'','''')
    project_start_date=request.POST.get(''startd'','''')
    project_end_date=request.POST.get(''endd'','''')
    social_end_date=request.POST.get(''sociald'','''')
    no_website=request.POST.get(''web'','''')
    founder=request.POST.get(''founder'','''')
    screenshot=None
    if not founder:
        founder="UnkNown"
    try:
        screenshot=request.FILES[''screenshots'']
    except MultiValueDictKeyError:
        pass
    notes=request.POST.get(''notes'','''')
    links=request.POST.get(''links'','''')
    if form.is_valid():
        form.save()
        add_dead_coin(category,coinname,cointicker,is_coin,totalcoins,no_exchange,project_start_date,project_end_date,social_end_date,no_website,founder,screenshot,notes,links,publish,delete,request)
        return render(request,''cryptocracy/dead_coins.html'',{
            ''data'': dead_coins_list,})
    else:
        return HttpResponse(form.errors.values())
return render(request,{
    ''data'': dead_coins_list,})

我尝试过的:

以及我在 stackoverflow 上发现的类似问题的 3-4 条其他建议

我怀疑我没有正确传递信息,但我不确定。 任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于form的valid验证的原理form.valid的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于的value为空字符串不显示的问题、bootstrapValidator form表单验证、CKEditor无法验证的解决方案(js验证+jQuery Validate验证)、django form.errors 显示“此字段是必需的!”使用 form.isvalid 运行模型表单验证后等相关内容,可以在本站寻找。

本文标签:

上一篇linux内核中i2c驱动中slave模式接口的调用(linux i2c驱动架构)

下一篇剑指offer第二版面试题7:二叉树的下一个节点(JAVA版本)(java 二叉树 面试)