Django学习之路由分发和反向解析

1>路由分发

    我们之前学习的路由配置都是在项目的全局控制文件(项目名称目录下的urls.py),

    这个一个文件当中配置映射关系,当一个项目的url越来越多时,比如项目当中一般都分一级菜单,二级菜单等等

    这些主页面url和众多不同分类下的子页面url全都挤在一个文件下,就会造成后期维护的困难,

    所以,引入路由分发来解决这个问题,

    其思想就是,一些公共的主页面/整个网站的一级菜单等全局视角的页面,放在项目的urls.py当中,

    一些单个应用对应的url就放在应用目录下面的urls.py当中,这样,用户访问页面,先再项目的urls中找,

    找不到,再去单个应用的urls中找,一来是urls配置解耦,二来这样显得更有层次感,方便管理。

    说这么多,究竟怎么做呢,其实也不难,

    上面说了,既然应用目录下面也要对应有个urls.py来存放本应用相关的url,那么新建一个urls.py文件肯定是要的。

    Django学习之路由分发和反向解析_第1张图片

    项目的urls做一点小小的改动,如下

    Django学习之路由分发和反向解析_第2张图片

    Django学习之路由分发和反向解析_第3张图片

2>先看登陆验证的例子

    view视图函数编写,若是get请求,就返回login页面,若是post请求,就验证账号密码,再根据

    验证结果返回200或者404。

    Django学习之路由分发和反向解析_第4张图片

    html的action,还是跳转到自己

    Django学习之路由分发和反向解析_第5张图片

    若碰上什么forbidden问题,把setting 的这行代码先注释掉, 就行了

    Django学习之路由分发和反向解析_第6张图片

    效果

    Django学习之路由分发和反向解析_第7张图片

    Django学习之路由分发和反向解析_第8张图片

    好,需求来了, 现在网站变化,重新定义了下之前的login页面,url由之前的login变成denglu

    嗯,顺理成章的,我们想到把urls的配置改下不就行了,如下

    Django学习之路由分发和反向解析_第9张图片

    Django学习之路由分发和反向解析_第10张图片

    Django学习之路由分发和反向解析_第11张图片

    是的,很容易想到,我们只改了urls的路径,因为页面post请求其实也是跳转到自己页面,

    而之前action是写死了login/的页面,那里没改过来,urls也没了login/这个apth对应的

    处理函数,自然就报404,找不到页面的错误了。

    恩,那就把action的也改成denglu不就行了吗,是可以,但这是比较低级的处理方法,因为

    你现在还只要改一处就可以,要是有很多地方都引用这个页面,岂非都要一个一个的去改?

    时间一长,工作量一大,就容易遗漏,容易出错,

    有没有一种方案,让所有引用的地方都调用原生的path,就是只要urls.py的path一变化,其他地方

    自动关联到最新的path,而不用像之前一样再一个一个去找,一个一个去改。

    有的, 反向解析就只解决这件事的高级处理方法

3>再说反向解析

   其实就是相当于给path取个别名,爱他地方通过特定的方式来引用这个别名就行了,这样就是实现了,

    不管你的path怎么变,反正我找的这个名称(path的别名)就是指到你这里,就行了。 

   一点点改变就可以实现反向解析效果,

    urls配置的改写

    Django学习之路由分发和反向解析_第12张图片

    HTML引用

    Django学习之路由分发和反向解析_第13张图片

    这就可以了!

    Django学习之路由分发和反向解析_第14张图片

    Django学习之路由分发和反向解析_第15张图片

4>python代码实现反向解析

    刚刚是HTML文件中实现的反向解析,再看下python这边怎么实现

    需要导入reverse方法

    urls中新增配置, login2/路径的别名LOGIN2,正则匹配login3/XXXX/ 别名为LOGIN3

    Django学习之路由分发和反向解析_第16张图片

    用reverse函数反解析,如下

    Django学习之路由分发和反向解析_第17张图片

你可能感兴趣的:(python学习)