PYTHON框架之DJANGO学习笔记

| 收藏本文 下载本文 作者:狼蛮果子

以下是小编为大家准备的PYTHON框架之DJANGO学习笔记(共含6篇),供大家参考借鉴,希望可以帮助到有需要的朋友。同时,但愿您也能像本文投稿人“狼蛮果子”一样,积极向本站投稿分享好文章。

PYTHON框架之DJANGO学习笔记

篇1:PYTHON框架之DJANGO学习笔记(十六)

今天简直无力吐槽了,去了香山,结果和网上看到的简直是天壤之别啊,说好的香山的枫树呢?说好的香山的红叶呢?说好的漫山遍野一片红呢?本以为在山上,一口气爬上去,沿路基本都是翠绿的松柏,松柏啊亲,难道我不仅红绿色盲,还是一个松枫不辨星人!更 的是回来的时候,排队等公交等了近三个小时,你说为什么不自驾游?没办法,穷人开不起撒,总之,一句话总结香山之旅:

如果你恨他/她,就让他/她周末去香山吧,如果他/她爱你,就让他/她周末带你去香山吧!恩,闲扯到此为止,虽然挺累,不过学习还是要接着进行滴,况且学习本就需要坚持,没点点毅力,三天打鱼,两天晒网,哪能学到什么东西呢。

表单改进

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

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

复制代码

1 from django.http import HttpResponse

2 from django.shortcuts import render_to_response

3 from books.models import Book

4

5 def search_form(request):

6  return render_to_response('search_form.html')

7

8 def search(request):

9  if 'q' in request.GET and request.GET['q']:

10    q = request.GET['q']

11    books = Book.objects.filter(title__icontains=q)

12    return render_to_response('search_results.html',

13      {'books': books, 'query': q})

14  else:

15    **return render_to_response('search_form.html', {'error': True})**

复制代码

PS:将search_form()视图也包含进来以便查看

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

复制代码

1

2

3  Search

4

5

6  **{% if error %}**

7    **

Please submit a search term.

**

8  **{% endif %}**

9  

10    

11    

12

13

14

复制代码

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

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

复制代码

1 def search(request):

2  error = False

3  if 'q' in request.GET:

4    q = request.GET['q']

5    if not q:

6      error = True

7    else:

8      books = Book.objects.filter(title__icontains=q)

9      return render_to_response('search_results.html',

10        {'books': books, 'query': q})

11  return render_to_response('search_form.html',

12    {'error': error})

复制代码

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

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

1

现在改成这样:

1

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

简单的验证

我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂的验证,

我们都有在网站上见过类似以下的错误提示信息:

请输入一个有效的email地址, foo’ 并不是一个有效的e-mail地址。

请输入5位数的U.S 邮政编码, 123并非是一个有效的邮政编码。

请输入YYYY-MM-DD格式的日期。

请输入8位数以上并至少包含一个数字的密码。

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

复制代码

1 def search(request):

2  error = False

3  if 'q' in request.GET:

4    q = request.GET['q']

5    if not q:

6      error = True

7    **elif len(q) >20:**

8      **error = True**

9    else:

10      books = Book.objects.filter(title__icontains=q)

11      return render_to_response('search_results.html',

12        {'books': books, 'query': q})

13  return render_to_response('search_form.html',

14    {'error': error})

复制代码

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

复制代码

1

2

3  Search

4

5

6  {% if error %}

7

Please submit a search term 20 characters or shorter.

8  {% endif %}

9  

10    

11    

12

13

14

复制代码

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

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

复制代码

1 def search(request):

2  **errors = []**

3  if 'q' in request.GET:

4    q = request.GET['q']

5    if not q:

6      **errors.append('Enter a search term.')**

7    elif len(q) >20:

8      **errors.append('Please enter at most 20 characters.')**

9    else:

10      books = Book.objects.filter(title__icontains=q)

11      return render_to_response('search_results.html',

12        {'books': books, 'query': q})

13  return render_to_response('search_form.html',

14    {**'errors': errors** })

复制代码

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

复制代码

1

2

3  Search

4

5

6  **{% if errors %}**

7    ****

8      **{% for error in errors %}**

9      **

{{ error }}

**

10      **{% endfor %}**

11    ****

12  **{% endif %}**

13  

14    

15    

16

17

18

篇2:python网络编程学习笔记:webpy框架

-04-04python ElementTree 基本读操作示例

-03-03python操作日期和时间的方法

-11-11python自动化工具日志查询分析脚本代码实现

2014-01-01Python获取当前时间的方法

2014-05-05Python中使用动态变量名的方法

2009-11-11Python 开发Activex组件方法

2014-06-06测试、预发布后用python检测网页是否有日常链接

-12-12让python json encode datetime类型

2013-11-11python连接MySQL、MongoDB、Redis、memcache等数据库的方法

-05-05删除目录下相同文件的python代码(逐级优化)

篇3:python网络编程学习笔记:webpy框架

最近更 新

python网络编程示例(客户端与服务端)

python实现的各种排序算法代码

Python完全新手教程

python求斐波那契数列示例分享

python批量下载图片的三种方法

Python查询Mysql时返回字典结构的代码

python 查找文件夹下所有文件 实现代码

python解析html开发库pyquery使用方法

Python中实现远程调用(RPC、RMI)简单例

python 字典(dict)遍历的四种方法性能测试

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇4:Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例

-01-01Python 调用DLL操作抄表机

-01-01linux系统使用python获取内存使用信息脚本分享

-12-12python正则匹配抓取豆瓣电影链接和评论代码分享

2013-05-05Python的词法分析与语法分析

2014-04-04python实现巡检系统(solaris)示例

2013-11-11python Django模板的使用方法(图文)

2014-06-06wxPython中文教程入门实例

2014-06-06有关wxpython pyqt内存占用问题分析

-03-03python 中的列表解析和生成表达式

-09-09Python 过滤字符串的技巧,map与itertools.imap

篇5:Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例

最近更 新

使用Python下载Bing图片(代码)

使用cx_freeze把python打包exe示例

教你安装python Django(图文)

python实现360的字符显示界面

Python学习笔记(一)(基础入门之环境搭建

爬山算法简介和Python实现实例

python的三目运算符和not in运算符使用示

python和pyqt实现360的CLable控件

python获取豆瓣电影简介代码分享

python 实现堆排序算法代码

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇6:Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍

最近更 新

python翻译软件实现代码(使用google api完

python实现360皮肤按钮控件示例

Python多线程学习资料

Python Mysql自动备份脚本

python正则表达式判断字符串是否是全部小

python定时器使用示例分享

python函数返回多个值的示例方法

python网络编程学习笔记(四):域名系统

python小技巧之批量抓取美女图片

python使用rsa加密算法模块模拟 登

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 字符串split的用法分享

python 文件和路径操作函数小结

“笔记”之死得其所

党员学习笔记

学习笔记范文

党员党课学习笔记

数学教学学习笔记

党员学习笔记1000字

个人学习笔记 范文

实施方案框架

框架合同

Python的Bottle框架中返回静态文件和JSON对象的方法

PYTHON框架之DJANGO学习笔记(精选6篇)

欢迎下载DOC格式的PYTHON框架之DJANGO学习笔记,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档