zoukankan      html  css  js  c++  java
  • django_2.0_请求处理

    当用户从Django支持的站点请求页面时,这是系统遵循的算法,以确定要执行的Python代码:

    1. Django确定要使用的根URLconf模块。通常,这是ROOT_URLCONF设置的值,但如果传入 HttpRequest对象具有urlconf 属性(由中间件设置),则将使用其值代替 ROOT_URLCONF设置。
    2. Django加载Python模块并查找变量 urlpatterns这应该是Python列表django.urls.path() 和/或django.urls.re_path()实例。
    3. Django按顺序遍历每个URL模式,并在匹配请求的URL的第一个模式停止。
    4. 一旦其中一个URL模式匹配,Django就会导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。视图传递以下参数:
      • 一个例子HttpRequest
      • 如果匹配的URL模式未返回任何命名组,则正则表达式中的匹配将作为位置参数提供。
      • 关键字参数由路径表达式匹配的任何命名部分组成,由或者 可选kwargs参数中指定的任何参数覆盖 django.urls.path()django.urls.re_path()
    5. 如果没有URL模式匹配,或者在此过程中的任何点期间引发异常,Django将调用适当的错误处理视图。请参阅下面的错误处理

      

    
    

    示例:

    这是一个示例URLconf:


    from
    django.urls import path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ]

    笔记:

    • 要从URL捕获值,请使用尖括号。
    • 捕获的值可以选择包括转换器类型。例如,用于 <int:name>捕获整数参数。如果未包含转换器/,则匹配字符之外的任何字符串
    • 没有必要添加前导斜杠,因为每个URL都有。例如,它articles不是/articles

    示例请求:

    • 请求/articles/2005/03/与列表中的第三个条目匹配。Django会调用该函数 views.month_archive(request, year=2005, month=3)
    • /articles/2003/将匹配列表中的第一个模式,而不是第二个模式,因为模式是按顺序测试的,第一个是第一个要通过的测试。随意利用订单插入这样的特殊情况。在这里,Django会调用该函数 views.special_case_2003(request)
    • /articles/2003 不匹配任何这些模式,因为每个模式都要求URL以斜杠结尾。
    • /articles/2003/03/building-a-django-site/将匹配最终模式。Django会调用该函数 views.article_detail(request, year=2003, month=3,slug="building-a-django-site")
  • 相关阅读:
    解决部分小程序无法获取UnionId的问题
    你也可以写个聊天程序
    JavaScript 数据结构与算法之美
    CSS content应用
    JS中判断null、undefined与NaN的方法
    IT资料常用网址汇总
    史上最全的正则表达式-匹配中英文、字母和数字
    百万数据修改索引,百万数据修改主键
    SQL Server 2005 实现数据库同步备份 过程--结果---分析
    数据库性能优化三:程序操作优化
  • 原文地址:https://www.cnblogs.com/Xingtxx/p/10843472.html
Copyright © 2011-2022 走看看