最近在学习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>
View Code

相关文章:

  • 2021-07-11
  • 2021-11-24
  • 2021-09-03
  • 2021-10-12
  • 2022-12-23
猜你喜欢
  • 2021-05-15
  • 2021-08-09
  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
  • 2022-01-19
  • 2021-11-05
相关资源
相似解决方案