之前我们做了hello的url转向,这是静态的,有些视图是动态的比如127.0.0.1:8000/articles/123 , book/345等。

让我们创建第三个视图来显示当前时间和加上时间偏差量的时间,设计是这样的: /time/plus/1/ 显示当前时

间+1个小时的页面 /time/plus/2/ 显示当前时间+2个小时的页面 /time/plus/3/ 显示当前时间+3个小时的

新手可能会考虑写不同的视图函数来处理每个时间偏差量

面向函数你可能会考虑

urlpatterns = patterns('',
('^time/$', current_datetime),
('^time/plus/1/$', one_hour_ahead),
('^time/plus/2/$', two_hours_ahead),
('^time/plus/3/$', three_hours_ahead),
('^time/plus/4/$', four_hours_ahead),
)


但是我们不是呆子啊,程序员都是智商超过120的天才啊

来来跟我敲代码


Urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls import patterns, include, url
from app01 import views as myapp
admin.autodiscover()
urlpatterns = [
   url(r'^admin/', include(admin.site.urls)),
   url(r'^$',myapp.index),
   url(r'^hello/$',myapp.hello),
   url(r'^time/plus/(\d{1,2})/$', myapp.hours_ahead),
   url(r'^time/',myapp.current_datetime),

]


views.py


def hours_ahead(request,offset):
try:
        offset = int(offset)
except ValueError:
raise Http404()
#raise "404"
now = datetime.datetime.now()
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "<html><body>当前时间 %s </br> 时差%s小时, %s.</body></html>" % (now,offset, dt)
return HttpResponse(html)


Django 笔记 动态URL_style

URL只匹配了2位plus后面,如果输入100那么将获取不到参数


Django 笔记 动态URL_动态_02




最后,很显然这些信息很多是敏感的,它暴露了你 Python 代码的内部结构以及 Django 配置,在 Internet 上

公开这信息是很愚蠢的。 不怀好意的人会尝试使用它攻击你的 Web 应用程序,做些下流之事。 因此,

Django 出错信息仅在 debug 模式下才会显现。 我们稍后 说明如何禁用 debug 模式。 现在,你只要知道

Django 服务器在你开启它时默认运行在 debug 模式就行了。 (听起来很熟悉? 页面没有发现错误,如前所

述,工作正常。)