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

2018年07月12日 14:04:55
huangql517
阅读数 519

1>路由分发

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

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

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

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

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

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

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

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

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

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

2>先看登陆验证的例子

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

验证结果返回200或者404。

html的action,还是跳转到自己

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

效果

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

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

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

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

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

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

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

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

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

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

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

3>再说反向解析

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

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

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

urls配置的改写

HTML引用

这就可以了!

4>python代码实现反向解析

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

需要导入reverse方法

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

用reverse函数反解析,如下

引自

Django学习之路由分发和反向解析的更多相关文章

  1. Django之路由分发和反向解析

    一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...

  2. Django学习路36_函数参数 反向解析 修改404 页面

    在 templates 中创建对应文件名的 html 文件 (.html) 注: 开发者服务器发生变更是因为 python 代码发生变化 如果 html 文件发生变化,服务器不会进行重启 需要自己手动 ...

  3. django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间

    目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...

  4. django之路由层(反向解析)总结

    表关系的建立方式 表与表之间的关系就三种 一对一 OneToOne(to='') # to后面可以跟字符串的表名 也可以直接跟变量名表名(该表名必须在上面提前定义出来) 一对多 ForeignKey( ...

  5. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  6. Django 学习 之路由层(URL)

    路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...

  7. Django学习之路由层

    Django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校验或在请 ...

  8. Django框架----命名URL和URL反向解析

    在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等).人们强烈希望不要硬编码这些URL(费 ...

  9. Django 项目 实现重定向并进行反向解析

    一.项目路由配置urls.py中 from django.conf.urls import include, url from django.contrib import admin # 匹配应用 u ...

随机推荐

  1. c#设置文件及文件夹的属性

    c#中通过FileAttributes枚举来设置文件或文件夹的属性. FileAttributes 枚举 成员名称 说明 Archive 文件的存档状态.应用程序使用此属性为文件加上备份或移除标记. ...

  2. ES6之主要知识点(八)Symbol

    防止属性名的冲突.这就是 ES6 引入Symbol的原因. 它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean).字符串(String). ...

  3. 经典分类CNN模型系列其五:Inception v2与Inception v3

    经典分类CNN模型系列其五:Inception v2与Inception v3 介绍 Inception v2与Inception v3被作者放在了一篇paper里面,因此我们也作为一篇blog来对其 ...

  4. 推荐5款超实用的.NET性能分析工具

    虽然.NET框架号称永远不会发生内存泄漏,原因是引入了内存回收机制.但在实际应用中,往往我们分配了对象但没有释放指向该对象的引用,导致对象永远无法释放.最常见的情况就是给对象添加了事件处理函数,但当不 ...

  5. LUOGU P2296 寻找道路 (noip 2014)

    传送门 解题思路 首先建一张反图,从终点dfs出哪个点直接或间接相连,然后直接跑最短路,跑的时候判断一下所连的点是否与终点相连. 代码 #include<iostream> #includ ...

  6. 最全的CSS hack没有之一

    1.何为HACK? 简单的说,HACK就是只有特定浏览器才能识别这段hack代码.Hack也可以说是让前端最为头疼的问题,因为要写N多种兼容代码.当然,IE是最让人蛋疼的. 一般来说,CSS HACK ...

  7. tmux连接时多个显示器分别显示不同的窗口大小

      如果两个电脑连接同一个tmux,但是他们各自的显示器大小不同,那么就会在一个显示器部分会显示灰色区.在tmux里面有个设置可以更改,在tmux里面输入命令 tmux set-window-opti ...

  8. storm 动态设置并发度

  9. Windows 的 80 端口被 System 进程占用解决方案

    通过 Windows 的资源监视器(win+R:resmon)可以看到 80 端口已经被占用,下图是已经解决好了,没能截图被占用的情况,下面给出解决方案. PS:贴出两个好用的 windows cmd ...

  10. python 中文乱码问

    在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...