zoukankan      html  css  js  c++  java
  • 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 以显示调试信息

  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/yeyong/p/3906385.html
Copyright © 2011-2022 走看看