Django 之 路由层

本文详细介绍了Django的路由处理,包括如何处理请求、无名和有名分组、反向解析、路由分发以及名称空间。重点讨论了URL模式的匹配顺序、视图函数的调用方式,以及反向解析在模板、Python代码和模型中的应用。通过理解这些概念,可以更好地管理和组织Django项目的路由层。
摘要由CSDN通过智能技术生成

Django如何处理请求

当用户从Django支持的站点请求页面时,这是由路由层确定要执行的Python代码:

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

路由层

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$',views.hello),
    url(r'^helloword/$',views.helloword),
]

​ 注意:第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数

网站首页路由
url(r'^$',views.home)
网站不存在页面
url(r'',views.error)

url()函数有四个参数, 两个是必须的: regex 和 view , 两个可选的: kwargs 和 name

  • regex 是 regular expression 的简写,这是字符串中的模式匹配的一种语法,Django 将请求的URL从上至下依次匹配列表中的正则表达式,直到匹配到一个为止。

  • view 当 Django匹配了一个正则表达式就会调用指定的view逻辑, 上面代码中会调用app01/views.py中的hello函数。

  • kwargs任意关键字参数可传一个字典至目标view。

  • name命名你的 URL, 使 url 在 Django 的其他地方使用, 特别是在模板中。

一个路由匹配示例:

from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

示例请求:

  • 请求 /articles/2005/03/ 与列表中的第三个条目匹配。Django会调用该函数 。views.month_archive(request, ‘2005’, ‘03’)
  • /articles/2005/3/ 不匹配任何URL模式,因为列表中的第三个条目需要两个月的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值