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调用的视图函数之间的映射表. ...
随机推荐
- Android animation summary
Android animation 动画定义 动画的意思就是一连串画面动起来了,根据这一连串画面的产生原理可分为两类:补间动画(Tween animation)和帧动画(frame animation ...
- win10 安装了virtualBox 启动报错 rc=-5640
刚刚安装的virtualbox 启动就弹窗报错,,但是通过找到log 发现了下面这样的一处报错: 然后搜素发现是跟win10应用程序错误,,解决办法如下: 1.到控制面板,,--程序 再次尝试,vir ...
- 如何让ls按目录和文件 分开进行列表?
linux的思想是: 有很多 "小工具", 但是功能并不弱的 小工具, 组合起来完成一些复杂的工作, 通过 这些工具的组合可以完成各种各样的, 不同的任务. 如: ls, sort, hea ...
- SQL Server中数据去重单列数据合并
sql中我们偶尔会用到对数据进行合并,但其中的某一列数据要进行合并的操作: 如下图,一个用户有多个角色ID,如果我们想要统计一个用户有哪些角色,并且以单列的展现形式,单纯的用DISTINCT去掉肯定是 ...
- Week 8 - 338.Counting Bits & 413. Arithmetic Slices
338.Counting Bits - Medium Given a non negative integer number num. For every numbers i in the range ...
- c++调用c#代码
// ConsoleApplication1.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include "pch.h" ...
- Bootstrap 学习笔记 项目实战 响应式轮播图
左右两个箭头可以随浏览器缩放进行移动 保持在图片中间 Html代码: <!DOCTYPE html> <html lang="zh-cn"> <hea ...
- 安全运维 - Linux系统维护
命令相关 帮助信息命令:help.whatis.info.which.whereis.man 目录管理: cd.ls.mkdir.rm.chmod.mv 用户管理: groupadd.groupdel ...
- [LeetCode] 834. Sum of Distances in Tree
LeetCode刷题记录 传送门 Description An undirected, connected treewith N nodes labelled 0...N-1 and N-1 edge ...
- airtestUI简单操作
touch 判断坐标位置 如touch((500, 600), duration=1) swipe 滑动位置 wait 等待画面出现 exists 判断画面中是否存在某个图片 test 调用输入法,输 ...