django"动态网页","动态url","调试方法"

一、动态网页

  其实只是每次刷新时,获取最新时间而已

  1、urls.py

from django.conf.urls import patterns, url, include

urlpatterns = patterns('',
                       (r'^$','django_web_app.views.home_page'),
                       (r'^latest_books/$', 'django_web_app.views.latest_books'),
                       (r'^current_datetime/$', 'django_web_app.views.current_datetime'),
)

  2、views.py

#coding:utf-8
from django.http import HttpResponse
from django.shortcuts import render_to_response
from models import Book
import datetime

def latest_books(request):
    #倒叙获取最新出版的10本书
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})

def home_page(request):
    return render_to_response('home_page.html')

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

  3、运行结果:

    

二、动态url

  其实就是用正则表达式,使多个不完全确定的url对应一个“视图函数”

  1、urls.py

from django.conf.urls import patterns, url, include

urlpatterns = patterns('',
                       #...
                       (r'^current_datetime/plus/(\d{1,2})/$', 'django_web_app.views.hour_plus'),
)

  说明如果不需要将\d{1,2}作为参数,则可以不加括号,访问效果不受影响。

from django.conf.urls import patterns, url, include

urlpatterns = patterns('',
                       #...
                       (r'^current_datetime/plus/\d{1,2}/$', 'django_web_app.views.hour_plus'),
)

  关于r的作用:

    告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)。

   在普通Python字符串中,反斜杠用于特殊字符的转义。由于反斜杠在Python代码

  和正则表达式中有冲突,因此建议在Python定义正则表达式时都使用原始字符串

  附:普通python里的一些转义字符:

  http://www.cnblogs.com/allenblogs/archive/2011/04/28/2031477.html

  2、views.py中新增部分:

def hour_plus(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)

  说明:offset 是从匹配的URL里提取出来的,捕获的参数永远是字符串(string)类型,而

    不会是整数(integer)类型,要使用整数必须类型转换。

  3、运行结果:

   1)不可匹配的url

   

   2)可匹配的url

   

三、出错与调试习惯

  django出错页可以显示足够多的相关信息,开发中尽量通过“出错页面”来调试,而不是到处使用print。

  eg:查看各个局部变量的值

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

 

   此处使用了assert False

   运行结果:

   

   说明:Django 出错信息仅在 debug 模式下才会显现Django 服务器在你开启它时默认运行在 debug 模式

     但是实际部署的时候需要禁用debug模式。

 

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

 

  

 

 

posted @ 2014-05-27 18:12  edisonfeng  阅读(1613)  评论(0编辑  收藏  举报