django form 对象is_bound属性

 

问题:

  如果判断一个form实例中有没有数据?

 

bug方法:

  通过form实例的is_valid()方法来验证

  1、Form类的定义

class YourName(Form):
    your_name = CharField(max_length=10)

  2、template直接渲染的上下文中的msg变量

{% extends 'learning/index.html' %}

{% block container %}
{{ msg }}
{% endblock %}

  3、view中的代码

def show_messsage(request):
    f = YourName()
    return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_valid())})

  查看效果

      

  可以看到页面中显示的是“the form has data = False” 看起来好像是判断正确了、但是问题并没有结束;这个“False”

  只是一个巧合。

 

  我们把代码改一下用来模拟一下用户的提交,假设用户提交了“12345678901234” 注意这里有14个字符。

     

  可以看到数据是有的、可能通过is_valid()是分辨不出来的。

 

 

正确的做法:

  1、通过form对象的is_bound属性来分辨form中是否有数据

def show_messsage(request):
    data={'your_name':'12345678901234'}
    f = YourName(data)
    return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_bound)})

  

      is_bound 当form对象中有数据时能正确判断数据是有的、而这个有与数据是否能通过校验无关。

 

  2、通过一个没有数据的form实例测试is_bound的效果

def show_messsage(request):
    f = YourName()
    return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_bound)})

  

     

 

总结:

  form对象的is_bound用于测试form中有没有数据、它并不关心数据能不能通过校验。

 

 

-----------------------------------------------------------------------------------------------

 

posted on 2018-03-23 20:52  蒋乐兴的技术随笔  阅读(515)  评论(0编辑  收藏  举报

导航