zoukankan      html  css  js  c++  java
  • 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/

      

  • 相关阅读:
    csrf攻击实例
    《四 数据库连接池源码》手写数据库连接池
    《四 spring源码》手写springmvc
    spring和springmvc是单例还是多例
    redis集群设置密码
    mongodb3.6集群搭建:分片集群认证
    mongodb3.6集群搭建:分片+副本集
    Mongo 3.6.1版本Sharding集群配置
    windows计划任务
    Redis slowlog慢查询
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/3755639.html
Copyright © 2011-2022 走看看