最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

简单解析Django框架中的表单验证

来源:动视网 责编:小采 时间:2020-11-27 14:34:30
文档

简单解析Django框架中的表单验证

简单解析Django框架中的表单验证:我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂的验证。 我们都有在网站上见过类似以下的错误提示信息: 请输入一个有效的email地址, foo' 并不是一个有效
推荐度:
导读简单解析Django框架中的表单验证:我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂的验证。 我们都有在网站上见过类似以下的错误提示信息: 请输入一个有效的email地址, foo' 并不是一个有效


我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂的验证。 我们都有在网站上见过类似以下的错误提示信息:

  • 请输入一个有效的email地址, foo' 并不是一个有效的e-mail地址。
  • 请输入5位数的U.S 邮政编码, 123并非是一个有效的邮政编码。
  • 请输入YYYY-MM-DD格式的日期。
  • 请输入8位数以上并至少包含一个数字的密码。
  • 关于JavaScript验证

    可以使用Javascript在客户端浏览器里对数据进行验证,这些知识已超出本书范围。 要注意: 即使在客户端已经做了验证,但是服务器端仍必须再验证一次。 因为有些用户会将JavaScript关闭掉,并且还有一些怀有恶意的用户会尝试提交非法的数据来探测是否有可以攻击的机会。

    除了在服务器端对用户提交的数据进行验证(例如在视图里验证),我们没有其他办法。 JavaScript验证可以看作是额外的功能,但不能作为唯一的验证功能。

    我们来调整一下search()视图,让她能够验证搜索关键词是否小于或等于20个字符。 (为来让例子更为显著,我们假设如果关键词超过20个字符将导致查询十分缓慢)。那么该如何实现呢? 最简单的方式就是将逻辑处理直接嵌入到视图里,就像这样:

    def search(request):
     error = False
     if 'q' in request.GET:
     q = request.GET['q']
     if not q:
     error = True
     **elif len(q) > 20:**
     **error = True**
     else:
     books = Book.objects.filter(title__icontains=q)
     return render_to_response('search_results.html',
     {'books': books, 'query': q})
     return render_to_response('search_form.html',
     {'error': error})
    
    

    现在,如果尝试着提交一个超过20个字符的搜索关键词,系统不会执行搜索操作,而是显示一条错误提示信息。 但是,search_form.html里的这条提示信息是:”Please submit a search term.”,这显然是错误的, 所以我们需要更精确的提示信息:

    
    
     Search
    
    
     {% if error %}
     

    Please submit a search term 20 characters or shorter.

    {% endif %}

    但像这样修改之后仍有一些问题。 我们包含万象的提示信息很容易使人产生困惑: 提交一个空表单怎么会出现一个关于20个字符限制的提示? 所以,提示信息必须是详细的,明确的,不会产生疑议。

    问题的实质在于我们只使用来一个布尔类型的变量来检测是否出错,而不是使用一个列表来记录相应的错误信息。 我们需要做如下的调整:

    def search(request):
     **errors = []**
     if 'q' in request.GET:
     q = request.GET['q']
     if not q:
     **errors.append('Enter a search term.')**
     elif len(q) > 20:
     **errors.append('Please enter at most 20 characters.')**
     else:
     books = Book.objects.filter(title__icontains=q)
     return render_to_response('search_results.html',
     {'books': books, 'query': q})
     return render_to_response('search_form.html',
     {**'errors': errors** })
    
    

    接着,我们要修改一下search_form.html模板,现在需要显示一个errors列表而不是一个布尔判断。

    
    
     Search
    
    
     **{% if errors %}**
     ****
     **{% for error in errors %}**
     **
  • {{ error }}
  • ** **{% endfor %}** **** **{% endif %}**

    文档

    简单解析Django框架中的表单验证

    简单解析Django框架中的表单验证:我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂的验证。 我们都有在网站上见过类似以下的错误提示信息: 请输入一个有效的email地址, foo' 并不是一个有效
    推荐度:
    标签: 验证 简单 的验证
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top