博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django系列教程:三、动态视图和动态Url
阅读量:5789 次
发布时间:2019-06-18

本文共 3333 字,大约阅读时间需要 11 分钟。

注明:python版本为3.3.1、Django版本为1.5.1,操作系统为Windows7,其他版本有一些不同的地方读者可以自行探讨。

前一章我们简略的讲解了下Django的视图和Url的配置,那么这一章我们就通过一个简单的例子来讲解下动态视图和动态Url。

照例使用python manage.py runserver 命令启动web服务。下面我们将用datetime模块显示和计算时钟。

打开上一章建立的view.py文件,在原有代码后面加入以下代码:

import datetimedef current_datetime(request):    now=datetime.datetime.now()    html="It's now %s." %now    return HttpResponse(html)

上面代码的意思如果大家稍微知道点python知识就应该明白,%now其实就是给%s传递了一个值,而已这里就不做过多解释。

再打开urls.py文件建立相应的url配置,url配置文件代码如下。

from django.conf.urls import patterns,include,urlurlpatterns = patterns('',    # Examples:     url(r'^hello/$','firstsite.view.hello',name='hello'),     url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),)

这里看到代码只是增加了倒数第二行一行,而且还删除了from firstsite.view import hello这一行(这是我后来才注意到到的在url中其实已经有导入的意思了,这行代码显得有点多余,并不影响代码的执行,也能输出helloworld,这里做个纠正。另外name的名字也不一定要是current_datetime,只是为了好记所以这样写。

打开浏览器输入: 显示出当前的时间。如下图:

---------------------------------------------------------------------

每次刷新页面都可以看到数字有变化哦。当然现在这只是静态的变化,如果我想得到一个小时候的时间该怎么办呢?下面我们就解决这个问题,也就是动态Url。

我们要实现的输入: 则显示比当前时间晚1个小时的时间,输入: 则显示比当前时间晚2个小时的时间,当然为了简便点我们将规定最大值为99,也就是最大显示99个小时以后的时间。

一般来说新手看到这个问题可能会直接在urls.py文件中写代码,比如下面这个:

from django.conf.urls import patterns,include,urlurlpatterns = patterns('',    # Examples:     url(r'^hello/$','firstsite.view.hello',name='hello'),      url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),     url(r'^time/plus/1/$','firstsite.view.current_datetime_addone',name='current_datetime_addone'),     url(r'^time/plus/2/$','firstsite.view.current_datetime_addtwo',name='current_datetime_addtwo’),     url(r'^time/plus/3/$','firstsite.view.current_datetime_addthree',name='current_datetime_addthree'),)

上面这些代码结合在view.py里面添加的current_datetime_addone、current_datetime_addtwo、current_datetime_addthree三个函数虽然可以显示:

这三个页面,但要显示4小时后则又要添加函数和url配置,显得好不麻烦,所以下面有一个更好的方法。

更改view.py代码如下:

def hours_add(request,offset):    try:        offset=int(offset)    except ValueError:        raise Http404()    dt=datetime.datetime.now()+datetime.timedelta(hours=offset)    html="In %s hour(s),it will be %s."%(offset,dt)    return HttpResponse(html)

其中的try和except是因为从url获得的参数可能会是数字以外的字符,offset可以随便为一个名称,接受url传递过来参数,try后面的offset=int(offset)只是因为timedelta()函数里面的几个参数要求的都要是整数,所以必须转换,如果传递过来的参数不是整数,比如: 传递过来的就是ab,这时没法将ab转换成整形,便会引发Http404()这个函数,至于这个函数怎么显示,大家可以百度之哦。

再更改urls.py文件代码如下:

from django.conf.urls import patterns,include,urlurlpatterns = patterns('',    # Examples:     url(r'^hello/$','firstsite.view.hello',name='hello'),     url(r'^time/$','firstsite.view.current_datetime',name='current_datetime'),     url(r'^time/plus/(\d{1,2})/$', 'firstsite.view.hours_add',name='time-plus'),     url(r'^.*$', 'firstsite.view.error', name='error'),)

倒数第二行其实是一个404的页面,只要在view.py里面再定义一个error函数就可以了,可以模仿hello。

倒数第三行的(\d{1,2})这个正则表达式的意思则是输入一个0-99(包括0和99)之间的数字。

好了现在输入: 试试看是不是得到了下面的结果。

---------------------------------------------------------------------

 更改数字试试看是不是有变化哦。

最后我们回到view.py文件的hours_add()函数,目前里面只传递了两个参数,那么我们是不是可以传递第三个参数呢?想到这,聪明的你应该知道怎么做了吧,这个问题就留给大家了。

另外本教程参考了DjangoBook2里面的很多内容,我也是每天学完一章然后隔一天就写个教程复习下,所以很多例子可能会很相似,大家也可以直接去看这本书,在我博客主页的连接上就有它的翻译版本,大家也可以网上下载,不过一定要注意版本哦。

这一章暂时就到这把,下周一就要交毕业设计了,论文才写了两章,要加油了。下一章我们讲讲Django的模板吧。

本人既是python的初学者也是Django的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。

 

转载于:https://www.cnblogs.com/thunderest/archive/2013/05/11/3073448.html

你可能感兴趣的文章
在VMware上安装CentOS-6.5 minimal - 安装VMware Tools
查看>>
使用 Xtrabackup 在线对MySQL做主从复制
查看>>
linux sort/uniq 使用
查看>>
enq: TT - contention等待事件
查看>>
【资料整理】git的使用
查看>>
python第三方模块—psutil模块
查看>>
Latches and Tuning:Latches
查看>>
Oracle OSW安装
查看>>
hadoop伪分布式2.4.1安装
查看>>
设置title图标
查看>>
centos7根分区扩容(适用目前主流版本)
查看>>
linux--pxe 安装系统
查看>>
ASPF(Application Specific Packet Filter)
查看>>
Jquery中缩小图像的大小
查看>>
logrotate日志自动分割
查看>>
linux命令——cp
查看>>
视频直播常见问题与解决办法汇总【系列一】
查看>>
【问题】The coprocessor thread stopped itself due to scan timeout or scan threshold
查看>>
jQuery | 获取及设置内容和属性
查看>>
wget的替换工具axel多线程下载详解
查看>>