菜单

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

2019年9月3日 - 理财婆高手论坛

轻便剖析Django框架中的表单验证,分析django框架表单

大家的搜寻示例仍旧特别地大约,极其从数额印证方面来说;大家一味只验证寻觅关键值是还是不是为空。
然后大多HTML表单包含着比检查实验值是不是为空更为复杂的证明。
我们都有在网址上见过类似以下的失实提醒音讯:

关于JavaScript验证

能够选取Javascript在客户端浏览器里对数码进行验证,那一个知识已超越本书范围。
要注意: 纵然在顾客端已经做了求证,可是服务器端仍必需再作证贰次。
因为有个别客商会将JavaScript关闭掉,况兼还会有一对装有恶意的客户会尝试提交非法的数目来探测是不是有能够攻击的机缘。

除了在劳务器端对客户提交的数目举行验证(比如在视图里证实),大家从未其他措施。
JavaScript验证能够用作是外加的功效,但无法同日而语独一的认证功能。

我们来调节一下search()视图,让她能够证实找寻关键词是或不是低于或等于18个字符。
(为来让例子更为刚强,我们假使若是首要词抢先21个字符将招致查询拾叁分慢慢悠悠)。那么该怎么实现啊?
最简便易行的情势便是将逻辑处理直接嵌入到视图里,就如那样:

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})

今昔,假使尝试着提交二个超过19个字符的探寻关键词,系统不会奉行找寻操作,而是体现一条错误提醒音讯。
不过,search_form.html里的那条提醒音信是:”Please submit a search
term.”,那明摆着是荒唐的, 所以我们须求更加准确的提醒音信:

<html>
<head>
  <title>Search</title>
</head>
<body>
  {% if error %}
    <p style="color: red;">Please submit a search term 20 characters or shorter.</p>
  {% endif %}
  <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
  </form>
</body>
</html>

但像这么修改之后仍有一点点主题素材。
大家满含万象的提醒音信很轻松使人发出可疑:
提交三个空表单怎会现出贰个关于19个字符限制的提示?
所以,提醒音讯必需是事无巨细的,显然的,不会生出疑议。

主题素材的本来面目在于我们只使用来一个布尔类型的变量来检查测量试验是不是出错,实际不是选拔三个列表来记录相应的错误音信。
我们需求做如下的调度:

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列表实际不是二个布尔判别。

<html>
<head>
  <title>Search</title>
</head>
<body>
  **{% if errors %}**
    **<ul>**
      **{% for error in errors %}**
      **<li>{{ error }}</li>**
      **{% endfor %}**
    **</ul>**
  **{% endif %}**
  <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
  </form>
</body>
</html>

大家的查找示例还是分内地大致,特别从数额表明方面来说;大家独有只验证寻找关键…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图