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)
    

      

  • 相关阅读:
    ASCII、Unicode和UTF-8等常见字符编码格式介绍
    pycharm创建脚本头文件模板
    pycharm常用设置项和快捷键
    Genymotion安装apk问题
    [Android测试] Appium的一些坑问题错误解决 与 技巧集锦
    Appium+python自动化测试过程中问题
    python客户端和Appium服务端联调出现的问题解决办法
    移动端自动化测试环境搭建
    "http://127.0.0.1:4723/wd/hub"的解释
    wireshark抓包看ECN
  • 原文地址:https://www.cnblogs.com/homle/p/8028276.html
Copyright © 2011-2022 走看看