改进Django中的表单的简单方法


Posted in Python onJuly 17, 2015

首先,search()视图对于空字符串的处理相当薄弱——仅显示一条”Please submit a search term.”的提示信息。 若用户要重新填写表单必须自行点击“后退”按钮, 这种做法既糟糕又不专业。如果在现实的案例中,我们这样子编写,那么Django的优势将荡然无存。

在检测到空字符串时更好的解决方法是重新显示表单,并在表单上面给出错误提示以便用户立刻重新填写。 最简单的实现方法既是添加else分句重新显示表单,代码如下:

from django.http import HttpResponse
from django.shortcuts import render_to_response
from mysite.books.models import Book

def search_form(request):
  return render_to_response('search_form.html')

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

(注意,将search_form()视图也包含进来以便查看)

这段代码里,我们改进来search()视图:在字符串为空时重新显示search_form.html。 并且给这个模板传递了一个变量error,记录着错误提示信息。 现在我们编辑一下search_form.html,检测变量error:

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

我们修改了search_form()视图所使用的模板,因为search_form()视图没有传递error变量,所以在条用search_form视图时不会显示错误信息。

通过上面的一些修改,现在程序变的好多了,但是现在出现一个问题: 是否有必要专门编写search_form()来显示表单? 按实际情况来说,当一个请求发送至/search/(未包含GET的数据)后将会显示一个空的表单(带有错误信息)。 所以,只要我们改变search()视图:当用户访问/search/并未提交任何数据时就隐藏错误信息,这样就移去search_form()视图以及对应的URLpattern。

def search(request):
  error = False
  if 'q' in request.GET:
    q = request.GET['q']
    if not q:
      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})

在改进后的视图中,若用户访问/search/并且没有带有GET数据,那么他将看到一个没有错误信息的表单; 如果用户提交了一个空表单,那么它将看到错误提示信息,还有表单; 最后,若用户提交了一个非空的值,那么他将看到搜索结果。

最后,我们再稍微改进一下这个表单,去掉冗余的部分。 既然已经将两个视图与URLs合并起来,/search/视图管理着表单的显示以及结果的显示,那么在search_form.html里表单的action值就没有必要硬编码的指定URL。 原先的代码是这样:

<form action="/search/" method="get">

现在改成这样:

<form action="" method="get">

action=”“意味着表单将提交给与当前页面相同的URL。 这样修改之后,如果search()视图不指向其它页面的话,你将不必再修改action。

Python 相关文章推荐
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
pandas分区间,算频率的实例
Jul 04 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
pytorch常见的Tensor类型详解
Jan 15 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
Python的Django框架中的表单处理示例
Jul 17 #Python
Python中max函数用法实例分析
Jul 17 #Python
详解Django中Request对象的相关用法
Jul 17 #Python
Python实现SVN的目录周期性备份实例
Jul 17 #Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 #Python
Python的Django框架下管理站点的基本方法
Jul 17 #Python
Django中更新多个对象数据与删除对象的方法
Jul 17 #Python
You might like
德生1994机评
2021/03/02 无线电
Apache设置虚拟WEB
2006/10/09 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python调用fortran模块
2016/04/08 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python使用mysql的两种使用方式
2018/03/07 Python
python 以16进制打印输出的方法
2018/07/09 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
《一株紫丁香》教学反思
2014/02/19 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
安全标语口号
2014/06/09 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
先进工作者推荐材料
2014/12/23 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
美容院员工规章制度
2015/08/05 职场文书
自荐信范文
2019/05/20 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python