ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.6 Django 路由 URL

网友投稿 131 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第6节,由陈刚、王洪军编著。

2.6 Django 路由 URL

笔者使用过很多不同语法的不同框架,如 spring、beego 、laravel 、express 、flask 等,每个语言和框架都有适合解决特定问题的优势。其中的 URL, 也是每个框架的 基本功能。但说到最优雅、最易维护和扩展,个中翘楚,还属 Django 的 URL。

在2.5节中,只介绍了Djagno 的 URL 最基础的功能,核心代码如下:

上面的代码,只涉及了 urlpatterns 和 path 关键字。现在就来系统介绍 URL 的 全部功能,可能有点早;但如果不在这里作一个全面的讲解,又担心知识太碎片化,读 者不好拼接所有的知识点,所以笔者只好在此先插入 URL 的内容。如果有的读者 一下子消化不了,也没有关系,只要跟上章节的学习进度,在后面需要用到 URL 的 知识时,可以再回到这里来加强学习。

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.6 Django 路由 URL

Django 的 URL 功能,可以说是在 models 层、view 层、url 层,都实现统一形式, path 、include 、reverse 、resolve 、get_absolute__url 结合 namespace, 使我们在制作 URL 时,正向解析和反向解析都易如反掌,千变万化,又不失规范优雅。特别是在 Django 2.0 发布以后,简化了形式,且做到了向下兼容。下面就来慢慢了解这些 内容。

2.6.1 UrlConf 简介

URL 配置(UrlConf) 就像 Django 所支撑网站的目录。它的本质是URL 与要为 该 URL 调用的 view 函数之间的映射表;也就是告诉Django, 对于哪个 URL 调用哪 段代码。

Django 处理接收到 URL 的流程如下

① 首先确定使用的 UrlConf 模块,默认情况下使用的是 settings.py 中 ROOT_ URLCONF 对应的模块。如果接收到的 HttpRequest 经由 middleware 配置了 Url- Conf 属性,则就会使用该属性配置的模块。

② Django 在该模块中查找 Urlpatterns 变量,这个变量必须是 django.urls.path() 或者 django.urls.re_path() 实例的列表。

③ Django 按顺序匹配 Urlpatterns 中的模式,使用首先匹配到的模式。

④ 匹配到模式后,会执行该模式对应的视图函数,或者视图类,并把以下参数传 递过去:

● HttpRequest 实例。

●如果匹配到的模式没有返回 named group,则正则表达式返回的匹配内容就 会作为 positional arguments。

●路径表达式匹配到的 named part 作为 keyword arguments,会被 django. urls.path() 和 django.urls.re_path() 所指定的 kwargs 所覆盖。

⑤ 如果没有匹配到模式,或者处理过程中抛出了异常,则 Django 会调用处理异 常的视图。

2.6.2 UrlConf 的 Urlpatterns

urls.py 中默认就有 Urlpatterns, 可以把它看作一个存放了映射关系的列表。 Django 2.x 中常用的是 path() 方法,还可以使用re_path() 方法来兼容1.x 版本中 的 url() 方法。这里只讲述 path 方法的用法。

函数 path() 具有四个参数,其中有:两个必选参数 route 和 view, 两个可选参数 kwargs 和 name, 即路由和视图是必选参数。其与旧版本参数的主要区别就在于url() 是要写正则表达式(regex) 的,而 path() 是写的路由(route) 。 接下来主要看一下 path() 函数的四个参数含义。

1.route [必选参数]

route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求 时,它会从 Urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配 的项。

这些准则不会匹配 GET 和 POST 参数或域名。例如,UrlConf 在处理请求 ht- tps://localhost/bbs/2019/ 时,会尝试匹配上面第7行的路由;处理请求 https://lo- calhost/bbs/2019/?page=3 时,也只会尝试匹配第7行的路由。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_7.5 付款管理
下一篇:《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_2.6 当单元格内容或链接改变时触发事件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×