Django视图层:URL调度器、Django处理一个请求、URLconf在查找什么?URL:①path()路径、②路径转换器Path converter、③正则表达式组re_path()

一、视图层The view layer

Django 具有 “视图” 的概念,负责处理用户的请求并返回响应。
在这里插入图片描述

二、URL调度器URL dispatcher

在这里插入图片描述
在这里插入图片描述
urlpattern:URL模式

URL一般有二级:总路由和子路由

  • 主工程目录下的urls.py。url/即为总路由,myapp.urls即为子路由
urlpatterns = [
	path("url", view, name=None),
	path("url/", include(myapp.urls, namespace=xxx)),  # 包含子路由,namespace给所有的子路由起一个名字用于反向解析
]
  • 应用myapp目录下的urls.py,子路由,子路由没有include
urlpatterns = [
	path("url", view, name=None),  # 子路由没有include
]
  • include()的namespace和path()的name都是在反向解析中使用,即反向获取url路径:namespace.name

三、Django 如何处理一个请求?

当一个用户请求 Django 站点的一个页面,下面是 Django 系统决定执行哪个 Python 代码使用的算法:

  1. Django加载URLconf模块。如果没有传入HttpRequest 对象,Django使用根URLconf模块,即默认显示一个小火箭。否则进入以下第2步。
  2. Django加载Python代码,URLconf寻找可用的urlpatterns 。urlpatterns是django.urls.path() 和(或) django.urls.re_path() 实例的序列(sequence)。
  3. Django按顺序遍历每个urlpatterns,然后在所请求的URL匹配到第一个模式后停止,并与path_info 匹配。
  4. 一旦有URL匹配成功,Djagno导入并调用相关的视图。视图会获得如下参数:

4.1 一个 HttpRequest 实例。
4.2 如果匹配的URL包含未命名组,则使用正则表达式的匹配项作为位置参数。
4.3 关键字参数由路径表达式匹配的任何命名部分组成,并由django.urls.path() 或django.urls.re_path() 的可选 kwargs参数中指定的任何参数覆盖。

  1. 如果没有URL被匹配,或者匹配过程中出现了异常,Django调用一个适当的错误处理视图

四、URLconf在查找什么?

请求的URL被看做是一个普通的Python 字符串, URLconf在其上查找并匹配。进行匹配时将不包括GET或POST请求方式的参数以及域名。

例如, https://www.example.com/myapp/ 请求中,URLconf 将查找 myapp/
在 https://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找 myapp/ 。

**URLconf 不检查使用了哪种请求方法。**换句话讲,所有的请求方法 —— 即,对同一个URL的无论是 POST请求 、 GET请求 、或 HEAD 请求方法等等 —— 都将路由到相同的函数

五、第一种方式:path()元组

urlpatterns = [
path(‘admin/’, admin.site.urls),
path(“index/”, views.index),
path(“login/”, views.myview.as_view())]

path(route, view, kwargs=None, name=None, Pattern=None)

每个path是一个元组,path() 有五个参数,两个必须参数:route 和 view,三个可选参数:kwargs、name、pattern

path() 参数: route
route 是字符串,是匹配 URL的准则(类似正则表达式)。当 Django 响应一个request请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配用户在浏览器requested URL与列表中的每一项,直到找到匹配的项

这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值