Django学习之路由分发和反向解析
Django学习之路由分发和反向解析
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学习之路由分发和反向解析的更多相关文章
- Django之路由分发和反向解析
一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...
- Django学习路36_函数参数 反向解析 修改404 页面
在 templates 中创建对应文件名的 html 文件 (.html) 注: 开发者服务器发生变更是因为 python 代码发生变化 如果 html 文件发生变化,服务器不会进行重启 需要自己手动 ...
- django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间
目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...
- django之路由层(反向解析)总结
表关系的建立方式 表与表之间的关系就三种 一对一 OneToOne(to='') # to后面可以跟字符串的表名 也可以直接跟变量名表名(该表名必须在上面提前定义出来) 一对多 ForeignKey( ...
- django 路由层(反向解析)03
目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...
- Django 学习 之路由层(URL)
路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...
- Django学习之路由层
Django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校验或在请 ...
- Django框架----命名URL和URL反向解析
在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等).人们强烈希望不要硬编码这些URL(费 ...
- Django 项目 实现重定向并进行反向解析
一.项目路由配置urls.py中 from django.conf.urls import include, url from django.contrib import admin # 匹配应用 u ...
随机推荐
- c#设置文件及文件夹的属性
c#中通过FileAttributes枚举来设置文件或文件夹的属性. FileAttributes 枚举 成员名称 说明 Archive 文件的存档状态.应用程序使用此属性为文件加上备份或移除标记. ...
- ES6之主要知识点(八)Symbol
防止属性名的冲突.这就是 ES6 引入Symbol的原因. 它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean).字符串(String). ...
- 经典分类CNN模型系列其五:Inception v2与Inception v3
经典分类CNN模型系列其五:Inception v2与Inception v3 介绍 Inception v2与Inception v3被作者放在了一篇paper里面,因此我们也作为一篇blog来对其 ...
- 推荐5款超实用的.NET性能分析工具
虽然.NET框架号称永远不会发生内存泄漏,原因是引入了内存回收机制.但在实际应用中,往往我们分配了对象但没有释放指向该对象的引用,导致对象永远无法释放.最常见的情况就是给对象添加了事件处理函数,但当不 ...
- LUOGU P2296 寻找道路 (noip 2014)
传送门 解题思路 首先建一张反图,从终点dfs出哪个点直接或间接相连,然后直接跑最短路,跑的时候判断一下所连的点是否与终点相连. 代码 #include<iostream> #includ ...
- 最全的CSS hack没有之一
1.何为HACK? 简单的说,HACK就是只有特定浏览器才能识别这段hack代码.Hack也可以说是让前端最为头疼的问题,因为要写N多种兼容代码.当然,IE是最让人蛋疼的. 一般来说,CSS HACK ...
- tmux连接时多个显示器分别显示不同的窗口大小
如果两个电脑连接同一个tmux,但是他们各自的显示器大小不同,那么就会在一个显示器部分会显示灰色区.在tmux里面有个设置可以更改,在tmux里面输入命令 tmux set-window-opti ...
- storm 动态设置并发度
- Windows 的 80 端口被 System 进程占用解决方案
通过 Windows 的资源监视器(win+R:resmon)可以看到 80 端口已经被占用,下图是已经解决好了,没能截图被占用的情况,下面给出解决方案. PS:贴出两个好用的 windows cmd ...
- python 中文乱码问
在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...