gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章简单解析Django框架中的表单验证由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

关于JavaScript验证 。

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.”,这显然是错误的, 所以我们需要更精确的提示信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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列表而不是一个布尔判断.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>

最后此篇关于简单解析Django框架中的表单验证的文章就讲到这里了,如果你想了解更多关于简单解析Django框架中的表单验证的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com