django之路由的理解
一:路由
简单的路由过程图:

1. 路由的定义位置

路由定义方式一:主路由和子路由分开定义
主路由的定义 urls.py
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^user/', include('user.urls'))
] 子路由的定义 user/urls
from django.conf.urls import url
from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [
url(r"^index/$", views.index),
]
路由的定义方式二:不在user目录中手动urls.py,而是将所有的路由都定义在主路由中。
from django.conf.urls import url
from django.contrib import admin
import users.views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^user/index/$', users.views.index)
]
二:路由的解析顺序
Django接收一个请求时,从主文件的urls中的urlpatterns列表中从上至下顺序寻找路由,如果遇见include,进入里面继续寻找子路由。
但是:因为由上至下,所以会造成上面的路由覆盖下面的路由,导致下面的路由访问不到,举例说明
from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request):
"""
:return:
"""
return HttpResponse("中国,你好") def index_test(request): return HttpResponse("专门测试路由屏蔽,看是否能被访问到")
修改user中的urls中的urlpatterns列表
from django.conf.urls import url
from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。
urlpatterns = [
# url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index/$", views.index),
url(r"^index_test/$", views.index_test) # 测试是否被覆盖
]
访问 127.0.0.1:8000/user/index_test:路由没有被覆盖

上下互换 index和index_test也不会被覆盖:原因是$,终止符
假设去掉终止符$:看看情况如何
from django.conf.urls import url
from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。
urlpatterns = [
# url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index", views.index),
url(r"^index_test", views.index_test),
# url(r"^index/$", views.index),
]
结果:再也不能执行到index_test的视图函数中去:去掉斜杠了和$,匹配到第一个index就停止了,直接进入index中去了。

但是不去掉斜杠,依然可以进入视图
from django.conf.urls import url
from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。
urlpatterns = [
# url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django
url(r"^index/", views.index),
url(r"^index_test/", views.index_test),
# url(r"^index/$", views.index),
]
结果:可以执行到index_test视图函数中去

说明 / 有类似于$一样的终止的功能,到底是不是呢?
解释:加斜杠的url(r"^index_test/", views.index_test),能保证路径的唯一性。
用户访问 index_test 或者 index_test/ 网址,均能访问到index_test视图。
即使你输入的网址是127.0.0.1:8000/user/index_test django框架还是将网址显示为:127.0.0.1:8000/user/index_test/
因此:必要的时候还是以$结尾,即使不以$结尾,也要以/结尾,以免发生路由覆盖的问题。
三:反向解析
# 没搞懂
django之路由的理解的更多相关文章
- python 全栈开发,Day68(Django的路由控制)
昨日内容回顾 1 MVC和MTV MTV 路由控制层(分发哪一个路径由哪一个视图函数处理) V : views (逻辑处理) T : templates (存放html文件) M : model (与 ...
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
- django的路由系统
在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url ...
- django之路由层
一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...
- Python学习(三十一)—— Django之路由系统
转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...
- Django之路由
Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时 ...
- Django之路由系统 Dj
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- Django框架----路由系统(详细)
Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...
随机推荐
- linux让命令或程序在终端后台运行的方法(Ubuntu/Fedora/Centos等一样适用)
https://segmentfault.com/a/1190000008314935
- sql数据库收缩
回收步骤: 1.查看日志文件大小[一般回收比较大的] --适用于RDS For SQL Server2012\2016 SELECT DB_NAME(database_id) AS [Database ...
- 从进度条和alert的出现顺序来了解浏览器 UI 渲染 & JS进程
项目里有一个需求是在上传文件的时候需要显示进度条,那么理所当然的在上传完成后就需要提示用户上传完毕并且更新进度条. 之前的预期表现是,上传完毕后,先更新进度条到100%,再alert出提示,所以代码如 ...
- Linux_ISCSI服务器
目录 目录 网络存储 ISCSI How to setup ISCSI server SCSI Commands Server Side Client Side Edit the ISCSI conf ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_4_Set集合存储元素不重复的原理
set集合元素为什么不能重复 集合重写了toString的方法所以打印是里面的内容 往里面存了三次abc 哈希表,初始容量是16个 set集合存储字符串的时候比较特殊 横着是数组,竖着就是链表结构.跟 ...
- k8s创建资源
一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令直接创建(适用于少数的pod创建) kubectl run httpd- ...
- Swiper轮播手动后不动
最近项目首页轮播图用了Swiper轮播,今天突然发现轮播图动画初始正常但是手动换过之后就不动了,解决方法有两种,具体根据采用的情况为准: 1.autoplayDisableOnInteraction: ...
- Android 静态广播和动态广播接收顺序
Android广播有两个很重要的要素: 1 广播 - 用于发送广播 有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达. 典型代表:短信广播 普通广播 - 发送至每一 ...
- 安装element-ui
element地址:https://element.eleme.cn/2.0/#/zh-CN/component/quickstart 1.在新建终端 [安装element-ui组件依赖]cnpm i ...
- 【EWM系列】SAP 关于EWM的WT增强简介
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 关于EWM的WT增强简介 ...