• django学习笔记3: View and URL configure


    #views.py
    from django.http import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello world")
    


    urls.py

    from django.conf.urls.defaults import *
    
    urlpatterns = patterns('',
    )
    


    修改过的urls.py

    from django.conf.urls.defaults import *
    from mysite.views import hello
    
    urlpatterns = patterns('',
        ('^hello/$', hello),
    )
    


    根目录匹配

    from mysite.views import hello, my_homepage_view
    
    urlpatterns = patterns('',
        ('^$', my_homepage_view),
        # ...
    )
    


    Django如何处理请求

    Django是怎么处理请求的
    在继续我们的第二个视图功能之前,让我们暂停一下去了解更多一些有关Django是怎么工作的知识. 具体地说,当你通过在浏览器里敲http://127.0.0.1:8000/hello/来访问Hello world消息得时候,Django在后台有些什么动作呢?
    
    所有均开始于setting文件。当你运行python manage.py runserver,脚本将在于manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置时ROOT_URLCONF,它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到
    
    还记得什么时候django-admin.py startproject创建文件settings.py和urls.py吗?自动创建的settings.py包含一个ROOT_URLCONF配置用来指向自动产生的urls.py. 打开文件settings.py你将看到如下:
    
    ROOT_URLCONF = 'mysite.urls'
    相对应的文件是mysite/urls.py
    
    当访问 URL /hello/ 时,Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。 当找到这个匹配 的URLpatterns就调用相关联的view函数,并把 HttpRequest 对象作为第一个参数。 (稍后再给出 HttpRequest 的更多信息) (我们将在后面看到HttpRequest的标准)
    
    正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。 一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的Web Response,(例如,网页内容)。
    
    总结一下:
    
    1.进来的请求转入/hello/.
    
    2.Django通过在ROOT_URLCONF配置来决定根URLconf.
    
    3.Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
    
    4.如果找到匹配,将调用相应的视图函数
    
    5.视图函数返回一个HttpResponse
    
    6.Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
    
    


    动态内容

    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

    from django.conf.urls.defaults import *
    from mysite.views import hello, current_datetime
    
    urlpatterns = patterns('',
        ('^hello/$', hello),
        ('^time/$', current_datetime),
    )
    


    松耦合url配置,一个或多个url partern对应一个或多个view

    urlpatterns = patterns('',
        ('^hello/$', hello),
        ('^time/$', current_datetime),
        ('^another-time-page/$', current_datetime),
    )
    


    动态URL

    from django.conf.urls.defaults import *
    from mysite.views import hello, current_datetime, hours_ahead
    
    urlpatterns = patterns('',
        (r'^hello/$', hello),
        (r'^time/$', current_datetime),
        (r'^time/plus/(\d{1,2})/$', hours_ahead),
    )
    


    views.py

    from django.http import Http404, HttpResponse
    import datetime
    
    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)
    


    有些疑问的一段话

    机灵的读者可能会问: 我们在URL模式中用正则表达式(d{1,2})约束它,仅接受数字怎么样?这样无论如何,offset都是由数字构成的。 答案是:我们不会这么做,因为URLpattern提供的是“适度但有用”级别的输入校验。万一这个视图函数被其它方式调用,我们仍需自行检查ValueError。实践证明,在实现视图函数时,不臆测参数值的做法是比较好的。 松散耦合,还记得么?
    
    


    在语句中加入  assert False 以显示调试信息

  • 相关阅读:
    C#线程的IsBackgroud属性动态设置
    asp.net 异步
    IBM一些Java文章
    (一)Apollo配置中心介绍
    样式表中的 element.style样式如何修改
    jquery中的append和js原生中的innerhtml的区别
    如何在datagrid中的column获取json数据
    快速排序
    冒泡排序
    二进制中有多少个1?
  • 原文地址:https://www.cnblogs.com/yeyong/p/3906385.html
Copyright © 2020-2023  润新知