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调用的视图函数之间的映射表. ...
随机推荐
- Android4.0 Camera架构初始化流程【转】
本文转载自:http://blog.chinaunix.net/uid-2630593-id-3307176.html Android Camera 采用C/S架构,client 与server两个独 ...
- qbzt day4 下午
有向图的强连通分量 强联通:两个点之间可以互相到达 如果某个图任意两个点都是强联通的,那么称这个图强联通 如果一个图的子图是强联通的,那么称这个图是强联通子图 一个图的极大强联通子图被称作强连通分量 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_13-ArrayList集合概述和基本使用
新建类 多了个尖括号,大写字母E,这是什么意思呢? 尖括号当中叫做泛型.存储的统一的类型,这个类型就在尖括号里面写上,我们用一个字母占位表示. 如何创建呢 构造方法有三个,最常用的就是无参构造 先掌握 ...
- python每日一练:0001题
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? import o ...
- [12期]Mysql案例分析
腾讯视频源:http://v.qq.com/vplus/0ef1d6371912bf6d083dce956f48556c 访问新闻版块,去掉?ID=X的参数以后报错 参数去掉,没有报错,显示正常,说明 ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
- oracle--多表联合查询sql92版
sql92学习 -查询员工姓名,工作,薪资,部门名称 sql的联合查询(多表查询) --1.sql92标准 ----笛卡尔积:一件事情的完成需要很多步骤,而不同的步骤有很多种方式,完成这件事情的所有方 ...
- c++中关于类的长度的猜想
在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是2的倍数.4的倍数. 在翻阅资料中,我得出了一些我认为可能的猜想. 我们先来看一串代码 #include<iostream&g ...
- <每日一题>Day 9:POJ-3281.Dining(拆点 + 多源多汇+ 网络流 )
Dining Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24945 Accepted: 10985 Descript ...
- Java学习day11-类的成员之三:构造器(构造方法)
一.构造器(构造方法) 语法格式: 修饰符 类名(参数列表){ 初始化语句: } 构造器的特征: 1.它具有与类相同的名称 2.它不声明返回值类型.(与声明为void不同) 3.不能被static.f ...