python django 表单_【Python】django表单与提交

参考:http://djangobook.py3k.cn/2.0/chapter07/

本文的内容应属于django的表单模块,没有涉及到的后端request对象的处理方法可以单独深入学习表单。

URL和View

写一个简单的views.py:

1 from django.http importHttpResponse2

3 defhello(request):4 return HttpResponse("Hello world")

每个视图函数至少要有一个参数,通常被叫作request。 这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,我们虽然不用request做任何事情,然而它仍必须是这个视图的第一个参数。

这个函数只有简单的一行代码: 它仅仅返回一个HttpResponse对象,这个对象包含了文本“Hello world”。

URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。

在urls.py添加hello:

1 from django.conf.urls.defaults import *

2 from mysite.views importhello3

4 urlpatterns = patterns('',5 ('^hello/$', hello),6 )

首先,我们从模块 (在 Python 的 import 语法中, mysite/views.py 转译为 mysite.views ) 中引入了 hello 视图。 (这假设mysite/views.py在你的Python搜索路径上。关于搜索路径的解释,请参照下文。)

接下来,我们为urlpatterns加上一行: (‘^hello/$’, hello), 这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。

正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的Web Response,例如,网页内容。

请求在django中view.py和urls.py的简单调用流程说明:

1、进来的请求转入/hello/.

2、Django通过在ROOT_URLCONF配置来决定根URLconf.

3、Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

4、如果找到匹配,将调用相应的视图函数

5、视图函数返回一个HttpResponse

6、Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

Request对象

HttpRequest对象包含当前请求URL的一些信息:

request.path: 除域名以外的请求路径,以正斜杠开头,例如"/hello/"

request.get_host(): 主机名(比如,通常所说的域名),例如"127.0.0.1:8000" or "www.example.com"

request.get_full_path(): 请求路径,可能包含查询字符串,例如"/hello/?print=true"

request.is_secure(): 如果通过HTTPS访问,则此方法返回True,否则返回False/True,或者False

request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。 注意,Header信息的完整列表取决于用户所发送的Header信息和服务器端设置的Header信息。

request.META 字典中几个常见的键值有:

HTTP_REFERER: 进站前链接网页,如果有的话。 (请注意,它是REFERRER的笔误。)

HTTP_USER_AGENT:用户浏览器的user-agent字符串,如果有的话。 例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .

REMOTE_ADDR:客户端IP,如:"12.345.67.89" 。(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址,如:"12.345.67.89,23.456.78.90" 。)

例如:

1 from django.shortcuts importrender_to_response2

3 deftest(request):4 info = request.META['HTTP_USER_AGENT']5 return render_to_response('test.html',{'info':info})

或者:

1 from django.http importHttpResponse,HttpResponseRedirect2

3 deftest(request):4 info = request.META['HTTP_USER_AGENT']5 return HttpResponse("%s" % info)

注意,因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。HTTP header信息是由用户的浏览器所提交的、不应该给予信任的“额外”数据,因此你总是应该好好设计你的应用以便当一个特定的Header数据不存在时,给出一个优雅的回应。你应该用try/except语句,或者用Python字典的get()方法来处理这些“可能不存在的键”:

1 #BAD!

2 defua_display_bad(request):3 ua = request.META['HTTP_USER_AGENT'] #Might raise KeyError!

4 return HttpResponse("Your browser is %s" %ua)5

6 #GOOD (VERSION 1)

7 defua_display_good1(request):8 try:9 ua = request.META['HTTP_USER_AGENT']10 exceptKeyError:11 ua = 'unknown'

12 return HttpResponse("Your browser is %s" %ua)13

14 #GOOD (VERSION 2)

15 defua_display_good2(request):16 ua = request.META.get('HTTP_USER_AGENT', 'unknown')17 return HttpResponse("Your browser is %s" % ua)

GET和POST

除了基本的元数据,HttpRequest对象还有两个属性包含了用户所提交的信息:request.GET 和 request.POST。二者都是类字典对象,你可以通过它们来访问GET和POST数据。

POST数据是来自HTML中的〈form〉标签提交的,而GET数据可能来自〈form〉提交也可能是URL中的查询字符串(the query string)。

“request.GET和request.POST是类字典对象”,意思是他们的行为像Python里标准的字典对象,但在技术底层上他们不是标准字典对象。 比如说,request.GET和request.POST都有get()、keys()和values()方法,你可以用用 for key in request.GET 获取所有的键。

request.GET和request.POST拥有一些普通的字典对象所没有的方法。

类文件对象:这些Python对象有一些基本的方法,如read(),用来做真正的Python文件对象的代用品。

制作一个登录页面:

home_bak.html:

1

2

3

Home

4

5

6

7

8

9

10

11

12

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值