一、创建视图
1、在mysite文件夹下新建一个文件命名为views.py ,内容为:
from django.http import HttpResponse
def hello(request)
return HttpResponse("Hello World")
每个视图函数至少有一个参数,通常叫作request。
2、修改urls.py文件,添加views.py 中视图函数与url的映射。
from django.conf.urls.defaults import patterns, include, url
from mysite.views import hello
urlpatterns = patterns('',
('^hello/$', hello),
)
添加该视图函数hello的引用:from django.views import hello;添加url与视图函数的映射:('^hello/$', hello),这是一个元组,第一部分是一个正则表达式,指明url地址,第二个对应的是视图函数名称。其中,上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。
如果我们用尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不仅仅是/hello/。类似地,如果我们忽略了尖号(^),’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。如果我们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar。因此,我们使用这两个符号以确保只有/hello/匹配,不多也不少。
3、测试
运行服务器:python manange.py runserver
在浏览器中输入:http://127.0.0.1/hello/
二、正则表达式
符号 | 匹配 |
---|---|
. (dot) | 任意单一字符 |
\d | 任意一位数字 |
[A-Z] | A 到 Z中任意一个字符(大写) |
[a-z] | a 到 z中任意一个字符(小写) |
[A-Za-z] | a 到 z中任意一个字符(不区分大小写) |
+ | 匹配一个或更多 (例如, \d+ 匹配一个或 多个数字字符) |
[^/]+ | 一个或多个不为‘/’的字符 |
? | 零个或一个之前的表达式(例如:\d? 匹配零个或一个数字) |
* | 匹配0个或更多 (例如, \d* 匹配0个 或更多数字字符) |
{1,3} | 介于一个和三个(包含)之前的表达式(例如,\d{1,3}匹配一个或两个或三个数字) |
django处理请求的过程:
在用django-admin.py startproject mysite 创建工程时,自动在配置文件setings.py 文件中的ROOT_URLCONF赋值为:
ROOT_URLCONF = 'mysite.urls'
它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到。
1、访问URL/hello/时,django根据setings.py 中的ROOT_URLCONF的设置装载URLconf。
2、逐个匹配URLpatterns。
3、匹配成功,则调用相应的视图函数,视图函数返回一个HttpResponse
4、django转换HttpResponse为合适的HTTP response,以web page展现出来。
三、动态内容
动态显示当前时间,views.py 的内容
from django.http import HttpResponse
import datetime
def hello(request):
return HttpResponse("Hello world")
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
urls.py 内容:
from django.conf.urls.defaults import patterns, include, url
from mysite.views import hello,current_datetime
urlpatterns = patterns('',
('^hello/$', hello),
('^datetime/$', current_datetime),
)
四、动态url
方法:使用通配符
例子:计算时间差:
urls.py 中添加
(r'^time/plus/(\d{1,2})/$', current_datetime),
\d表示的数字,{1,2}限制在两位数以内,即0~99
r,表示不需要处理里面的反斜杠。
想把这些数字作为参数传递到视图函数中,需要用圆括号把他们括起来。
视图函数:
def hours_ahead(request, offset):
try:
offset = int(offset)
except ValueError:
raise Http404()
dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)
return HttpResponse(html)
我们把从url捕获到的offset转换成int类型的原因是:因为url捕获到的参数永远都是string类型。
可以在程序中添加:assert False 触发出错页,通过查看Local vars查看局部变量,这是一种调试方式。
本文为Eliot原创,转载请注明出处: http://blog.csdn.net/xyw_eliot/article/details/8842120