zoukankan      html  css  js  c++  java
  • 第三章 视图和URL配置

    1.第一份视图

      使用Django,页面的内容是靠view function(视图函数)来产生,URL定义在URLconf中。

      views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    
    def hello(request):
            return HttpResponse('hello')
    

      首先从django.http模块导入Httpresponse类,接下来定义视图函数,每个视图函数至少有一个参数,通常request。这是一个触发视图,包含web请求信息的对象,是类django.http.HttpRequest的一个实例。函数返回一个HttpResponse对象

    2.第一个URLconf

      URLconf是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用视图函数之间的映射表。

       在工程目录下的urls.py文件中

    from django.conf.urls import url,include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^news/',include('news.urls')),
    ]
    

      在app目录下,新建urls.py文件

    from django.conf.urls import url
    from django.contrib import admin
    from news import views
    urlpatterns = [
        #url(r'^admin/', admin.site.urls),
        url(r'^hello/$',views.hello),
    ]
    

      这样所有指向URL/hello/的请求都应由hello这个视图函数处理。

       在setting.py文件中,在官方文档中有:设置APPEND_SLASH,默认值:True,当设定为True时,如果请求的URL没有匹配URLconf里面的任何URL,并且URL没有/(斜杠)结束,将重定向到以/(斜杠)URL。需要注意的是任何重定向都有可能导致post数据丢失。APPEND_SLASH设置只有在安装了CommonMiddleware时才能用到。

      Django是怎么处理请求的

      在自动创建的setttings.py中包含一个ROOT_URLCONF配置用来指向自动产生的urls.py,在setttings.py文件中如下:

      ROOT_URLCONF = 'mysite.urls'

      总结一下:

      1. 进来的请求转入/hello/

      2. Django通过在ROOT_URLCONF配置来决定根URLconf。

      3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目

      4. 如果找到匹配,将调用相应的视图函数

      5. 视图函数返回一个HttpResponse

      6. Django转换HttpResponse为一个适合的HTTP response,以Web page显示出来

    第二个视图:动态内容

      利用datetime模块获取当前时间,显示在当前页面。代码如下:

      

    from django.shortcuts import render
    from django.http import HttpResponse
    import datetime
    
    def hello(request):
            return HttpResponse('hello')
    
    def current_datetime(request):
            now = datetime.datetime.now()
            html = "<html><body>it is now %s.</body></html>" % now
            return HttpResponse(html)
    

      然后在urls.py中添加URL模式,以告诉Django由哪一个URL来处理这个视图

     第三个视图 动态URL

      正则表达式字符串的开头字母'r',它告诉python这是一个原始字符串,不需要处理里面的反斜杠(转译字符)。

      在URL中,

    from news import views
    urlpatterns = [
        #url(r'^admin/', admin.site.urls),
        url(r'^hello/$',views.hello),
        url(r'^current_datetime/$',views.current_datetime),
        url(r'^time/plus/(d{1,2})/$',views.hours_ahead),
    

      在视图函数中,

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

      offset是从url中提取出来的,如果请求的是/time/plus/3/,那么offset=3,如果请求的是/time/plus/21/,那么offset=21,捕获值永远为字符串(string),而非整数。变量名无关紧要,

    它是函数第二个参数,可以使用关键字定义它,而非位置。

      在urls.py中,重新定义:

    from django.conf.urls import url
    from django.contrib import admin
    from news import views
    urlpatterns = [
        #url(r'^admin/', admin.site.urls),
        url(r'^hello/$',views.hello),
        url(r'^current_datetime/$',views.current_datetime),
        url(r'^time/plus/(?P<offset>d{1,2})/(?P<test>d*)/$',views.hours_ahead),
    ]
    

      在views.py中添加一个参数:

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

      

  • 相关阅读:
    Windows 科研软件推荐
    有关Python 包 (package) 的基本知识
    《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
    Coursera助学金申请模板
    《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
    Jupyter 解决单个变量输出问题
    解决 pandas 中打印 DataFrame 行列显示不全的问题
    《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
    缓存击穿及解决方案
    jvm垃圾收集器
  • 原文地址:https://www.cnblogs.com/homle/p/8028276.html
Copyright © 2011-2022 走看看