• Django 1.8_视图和URL配置


    前情提要

      学习了如何创建django项目,运行开发django服务器,并了解了mvc模式。

    内容

      VIEW

      URL

        正则表达式

        错误解析与寻求帮助

    • hello world.html
    • dynamic_date.html
    • dynamic_date_offset.html 

       Django处理请求的过程

    Helloword

      创建一网页,打开即显示helloworld。

      其中网页内容由视图生成,并配置URL。

        在mysite/mysites下创建views.py并编辑

    1 from django.http import HttpResponse
    2 
    3 def hello(request):
    4     return HttpResponse('HELLO, WORLD!')
    views.py
     1 from django.conf.urls import include, url 
     2 # include,导入另一个url的配置模块
     3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上
     4 from django.contrib import admin 
     5 from mysite import views 
     6 
     7 urlpatterns = [
     8     url(r'^admin/', include(admin.site.urls)),
     9     url(r'^hello/$', views.hello), 
    10 ]
    urls.py

    dynamic_date

     1 from django.http import HttpResponse
     2 import datetime
     3 
     4 def hello(request):
     5     return HttpResponse('HELLO, WORLD!')
     6 
     7 # new add
     8 def current_datetime(request):
     9     now = datetime.datetime.now()
    10     html = "It's now %s." % now
    11     return HttpResponse(html)
    views.py
     1 from django.conf.urls import include, url 
     2 # include,导入另一个url的配置模块
     3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上
     4 from django.contrib import admin 
     5 from mysite import views 
     6 
     7 urlpatterns = [
     8     url(r'^admin/', include(admin.site.urls)),
     9     url(r'^hello/$', views.hello), 
    10     # new add
    11     url(r'^time/$', views.current_datetime)
    12 ]
    urls.py

    dynamic_date_offset

     1 from django.conf.urls import include, url 
     2 # include,导入另一个url的配置模块
     3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上
     4 from django.contrib import admin 
     5 from mysite import views 
     6 
     7 urlpatterns = [
     8     url(r'^admin/', include(admin.site.urls)),
     9     url(r'^hello/$', views.hello), 
    10     url(r'^time/$', views.current_datetime),
    11     # new add
    12     url(r'^time/plus/(d{1,2})/$', views.hours_ahead) # 限制使用一个或者两个数字,最大偏移为99
    13 ]
    urls.py
     1 from django.http import HttpResponse, Http404
     2 import datetime
     3 
     4 def hello(request):
     5     return HttpResponse('HELLO, WORLD!')
     6 
     7 def current_datetime(request):
     8     now = datetime.datetime.now()
     9     html = "It's now %s." % now
    10     return HttpResponse(html)
    11 
    12 # new add
    13 def hours_ahead(request, offset):
    14     try:
    15         offset = int(offset) # 捕捉url中的偏移量数字,为unicode编码,转化成数字,后续用
    16     except ValueError:
    17         raise Http404()
    18     dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    19     html = "In %s hours, it will be %s" %(offset, dt)
    20     return HttpResponse(html)
    views.py

    Note: URL 和视图之间是松耦合的,即可以通过多个url定位到同一个视图,改变一个对另一个影响很小。

    正则表达式

      .  单个字符

       d  单个数字

      [A-Z]  大写字母中的某一个

      [a-z]  小写字母中的某一个

      [A-Za-z]  不区分大小写的某一个字母

         +    一个或者多个前述表达式  d+

      [^/]+    一个或多个字符,直到遇到斜线

      ?    零个或者一个前述表达式  d?

       *    零个或者多个前述表达式  

      {1,3}  介于一个到三个之间前述表达式 

    Django处理请求的过程

      点击url,后显示页面,django做了什么

    1. 请求/hello/
    2. Django查看ROOT_URLCONF设置,找到根URL配置
    3. Django比较URL配置中的各个URL模式,找到与/hello/匹配的那个
    4. 如果找到匹配的模式,调用对应的视图函数
    5. 视图函数返回一个HttpResponse对象
    6. Django把HttpResponse对象转化正确的HTTP响应,得到网页

    错误解析和寻求帮助

      页面顶部是异常关键信息: 异常类型和消息,抛出异常的文件以及所在的行号

      Trackback标题旁边有“Switch to copy-and-paste view”文本。点击后,就会切换到另一个版本,以便分享给别人,寻求帮助。

  • 相关阅读:
    物理机和虚拟机互相可以ping通,还是无法连接
    CentOS 7: ping Name or service not known
    Ubuntu上安装搜狗输入法(sogou)
    成功安装 tesserocr
    The following untracked working tree files would be overwritten by merge
    切换本地凭据(Windows上登录的GitHub账号)
    配置了SSH后还是每次都要求输入密码
    dpkg dependency problems prevent configuration
    mui 设置应用全屏模式
    解决烦人的缓存问题!
  • 原文地址:https://www.cnblogs.com/dignity/p/9941045.html
Copyright © 2020-2023  润新知