最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过。Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧~
本篇笔记(其实我的所有笔记都是),并不会过于详细的讲解。因此如果有大家看不明白的地方,欢迎在我正版博客下留言,有时间的时候我很愿意来这里与大家探讨问题。(当然,不能是简简单单就可以百度到的问题-.-)
我所选用的教材是《The Django Book 2.0》,本节是表单部分,对应书中第七章。
------------------------------------------------------------------------------------------------------------------------------------------------
0、阅读方法
本节笔记,略去很多书中学习过程与讲解,建议在看完原书此节后,作总结复习之用。
站点创建:django-admin.py startproject comeback
1、视图中的HttpResponse
首先给我们的代码加上一个视图,网址是"http://127.0.0.1:8000/",网站内容就是一个Hello World。
显然,其在"/comeback/views.py"中的代码内容是:
from django.http import HttpResponse def hello(request): return HttpResponse("Hello World")
其中,HttpResponse对象,即request变量,是有很多成员(属性和方法)的。通过他们,你可以知道很多信息,例如:正在加载这个页面的用户是谁,他用的是什么浏览器。
这里列举一些属性:
| 成员 | 说明 | 举例 |
| request.path | 除域名以外的请求路径,以斜杠(即 /)开头 | ”/hello/“ |
| request.get_host() | 主机名(例如:通常所说的域名) | "127.0.0.1" or "www.example.com" |
| request.get_full_path() | 请求路径,可能包含查询字符串 | "/hello/?print=true" |
| request.is_secure() | 如果通过https访问,返回True;否则,返回False | True or False |
还有一个属性要重点说明,request.META,这是一个python字典,包含了所有本次HTTP请求的Header信息。这个信息是由用户的浏览器所提交的:
| 成员 | 说明 | 备注 |
| HTTP_REFERER | 进站前链接网页(如果有的话) | 这是REFERRER的笔误-.-||| |
| HTTP_USER_AGENT | 用户浏览器的user-agent字符串(如果有的话) | 详见这一篇博文 |
| REMOTE_ADDR | 客户端IP | 如果经过代理服务器,那么是逗号分割的多个IP地址 |
应当注意,既然是用户浏览器提交的,这个信息也就不一定靠谱。因此,应当使用下列方式读取其中内容:
1. 使用 try / except 语句
def ua_display_good1(request): try: ua = request.META['HTTP_USER_AGENT'] except KeyError: ua = 'unknown' return HttpResponse("Your browser is %s" % ua)
2. 使用 python字典的 get()方法(推荐)
def ua_display_good2(request): ua = request.META.get('HTTP_USER_AGENT', 'unknown') return HttpResponse("Your browser is %s" % ua)
书中建议,你写一个函数,把request.META中所有数据打印出来看看,比如这样
1 def display_meta(request): 2 values = request.META.items() 3 values.sort() 4 html = [] 5 for k, v in values: 6 html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v)) 7 return HttpResponse('<table>%s</table>' % '\n'.join(html))
request.META的内容太多了,我把其内容做了初步的整理和翻译,有兴趣的同学可以到本节末尾附录中看。
当然,也可以用模板实现,而非手动输入代码,这里不多说。
request中,还有两个属性,内含用户所提交的信息:
| 成员 | 说明 |
| request.GET | HTML中的<form>标签提交的 or URL中的查询字符串(the query string) |
| request.POST | HTML中的<form>标签提交的 |
这两个都是类字典对象,即其实现了字典的所有成员,另外还有些字典没有的成员。
2. 利用GET请求,查询一本书籍
要做的事情很简单,做一个书籍查询页面,可以输入书名查书的信息。做法如下:
1. 按照模型一节所讲,创建书籍的数据库。
2. 在"/books/"下,创建几个文件
search_form.html
1 <html> 2 <head> 3 <title>Search</title> 4 </head> 5 <body> 6 {% if errors %} 7 <ul> 8 {% for error in errors %} 9 <li>{{ error }}</li> 10 {% endfor %} 11 </ul> 12 {% endif %} 13 <form action="" method="get"> 14 <input type="text" name="q"> 15 <input type="submit" value="Search"> 16 </form> 17 </body> 18 </html>