现在的位置: 主页 > 公司荣誉 > 文章列表

Django学习总结之三-视图和url配置

作者:程力专用汽车股份有限公司 来源:www.dfclxwc.com 未知发布时间:2017-09-10 09:57:25
Django学习总结之三-视图和url配置

一、创建视图

1、在mysite文件夹下新建一个文件命名为views.py ,内容为:


[python]
from django.http import HttpResponse

def hello(request)
return HttpResponse("Hello World")

from django.http import HttpResponse

def hello(request)
return HttpResponse("Hello World")每个视图函数至少有一个参数,通常叫作request。

2、修改urls.py文件,添加views.py 中视图函数与url的映射。


[python]
from django.conf.urls.defaults import patterns, include, url
from mysite.views import hello

urlpatterns = patterns('',
('^hello/$', hello),
)

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

二、正则表达式

符号 匹配
. (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 的内容


[python]
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)

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 内容:


[python]
from django.conf.urls.defaults import patterns, include, url
from mysite.views import hello,current_datetime

urlpatterns = patterns('',
('^hello/$', hello),
('^datetime/$', current_datetime),
)

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 中添加


[python]
(r'^time/plus/(\d{1,2})/$', current_datetime),

(r'^time/plus/(\d{1,2})/$', current_datetime),
\d表示的数字,{1,2}限制在两位数以内,即0~99

r,表示不需要处理里面的反斜杠。

想把这些数字作为参数传递到视图函数中,需要用圆括号把他们括起来。

视图函数:


[python]
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)

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:黄冈网站建设 http://huanggang.45qun.com

上一篇:struts2 自定义tag标签 下一篇:最后一页