ad

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

网友投稿 122 2023-11-07

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

2.6.3 UrlConf 的路由分发

在同一 Django 项目中有多个 App 应用,如果大家共有一个 URL, 那么在根 urls.py 中就要写巨多的 urls 映射关系。这样看起来很不灵活,而且杂乱无章,容易 造成混淆。这时就需要使用路由分发让每个 App 拥有自己单独的URL, 方便以后的 维护管理。也就是在每个 App 里,各自创建一个 urls.py 路由模块,然后从根路由出 发,将 App 所属的 URL 请求全部转发到相应的 urls.py 模块中。

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

路由转发使用的是 include() 方法,所以需要导入,它的参数是转发目的地路径 的字符串,路径以圆点分割。

每当 Django 遇到 include() ( 来 自django.urls.include()) 时,都会去掉 URL 中 匹配的部分,并将剩下的字符串发送给 include 的 UrlConf 做进一步处理,也就是转

发到二级路由中去。

比如,首先,在项目根 urls.py中写入urls映射条目。注意要导入include方法。

path('appl/',include("app01.urls")),

然后,要在 app01 下创建一个 urls.py 文件,用来处理请求的 URL, 使之与

views 建立映射。

urlpatterns =[

path('index/',views.index),

我们会在稍后的 Manabe 实践中,大量应用此技巧,希望读者在以后的开发工作 中,也能利用路由分发来实现对 URL 的管理。

2.6.4 UrlConf 的反向解析

在使用Django 项目时, 一个常见的需求是获得 URL 的最终形式,以用于嵌入 到生成的内容(视图或显示给用户的URL 等)中,或者用于处理服务器端的导航(重 定向等)。

作为开发者,你也不会希望硬编码这些 URL, 因为这样容易导致一定程度上产 生过期的URL 。你会希望设计一种与UrlConf 毫不相关的专门的URL 生成机制或 者直接不用硬编码的方式。

Django 提供了一个解决方案,使得 URL 映射器是 URL 设计的唯一存储库。用

你的 UrlConf 提供给它,然后它可以在两个方向上使用

① 从用户/浏览器请求的 URL 开始,它调用正确的 Django 视图,提供它可能需 要的任何参数以及从 URL 中提取的值。

② 从相应的 Django 视图的标识以及将传递给它的参数的值开始,获取关联 的 URL.

第①种是我们在前几节讨论过的用法,可以称之为 URL 正向解析。第②种是 所谓的 URL 反向解析,反向 URL 匹配、反向 URL 查询或者 URL 反转。

Django 提供了用于执行URL 反转的工具,以匹配需要URL 的不同图层。如要 正常使用URL 反转功能,需要在 urls.py 中起一个别名 name(name= 自定义的别 名);如果有多个 App 应用,最好和下节要讲的 URL 名称空间结合起来。

① 在 templates 模板中:使用URL 模板标签(URL '别名')。

② 在 Python 代码中:使用该 reverse()函数。

③ 在与处理 Django 模型实例的 URL 相关的更高级别的代码中:使用 get_ab- solute_url()方法(也就是在模型 model 中)。

例如, 一个最简单的 URL 定义如下:

01 from django.urls import path

02 from bbs import views as bbs_view

03

04 urlpatterns =[

05 path(bbs/2019/',bbs_view.special_case_2019,name='bbs_year_2019'),

06...

07 ]

那么,如果想在模板中跳转到此 URL, 则使用如下语法:

2019 bbs

如果想在 view 中跳转到此 URL, 则使用如下语法(需要 from django.urls im-

port reverse):

return HttpResponseRedirect(reverse('bbs_year_2019')

而在 models.py 中,则使用的语法类似如下(前提是先定义好带参数的

bbs_view):

def get_absolute_url(self):

return reverse('bbs_view',args =[self.slug])

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

上一篇:《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.6.3 使用 Sort 对象排序
下一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_6.2.3 常用控件:文本框
相关文章

 发表评论

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

×