一:路由

  简单的路由过程图:

  

  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之路由的理解的更多相关文章

  1. python 全栈开发,Day68(Django的路由控制)

    昨日内容回顾 1 MVC和MTV MTV 路由控制层(分发哪一个路径由哪一个视图函数处理) V : views (逻辑处理) T : templates (存放html文件) M : model (与 ...

  2. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  3. Django系列(二):Django的路由层,视图层和模板层

    1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...

  4. django的路由系统

    在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url ...

  5. django之路由层

    一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...

  6. Python学习(三十一)—— Django之路由系统

    转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...

  7. Django之路由

    Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时 ...

  8. Django之路由系统 Dj

    Django之路由系统   Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...

  9. Django框架----路由系统(详细)

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

随机推荐

  1. centos双网卡配置

    centos双网卡问题,一个网卡配置局域网,一个网卡配置公网,如果内网访问自动走eth1,如果外网访问自动走eth2. 需要配置路由吗? 1. 首先查看机器是否是双网卡,命令如下: lspci | g ...

  2. 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载

    [cpp] view plaincopyprint? /* windows2003 x86/x64 window7 x86 windows2008 R2 x64测试通过 */ #include < ...

  3. jenkins执行 pod install 报错 CocoaPods requires your terminal to be using UTF-8 encoding. Consider adding the following to ~/.profile:

    错误提示是: CocoaPods 需要终端使用utf-8编码 解决办法

  4. json模块:字符串与字典之间的转换--loads,dumps,load,dump

    一.json转化成字典: product.json文件:将该文件内容转换成python中字典,方法如下: 方法一:使用.loads(),先读后转换 import  json   #导入json, 注: ...

  5. UI自动化之读取浏览器配置

    以火狐浏览器为例 目录 1.找到配置项 2.读取配置 1.找到配置项 打开Firefox点右上角设置>?(帮助)>故障排除信息>显示文件夹,复制文件管理器地址栏 2.读取配置 用Fi ...

  6. 接口自动化之提取响应结果(raw、json)

    做接口测试时,我们一般会取得响应结果的部分值,来与预期结果对比,做断言 目录 1.响应结果类型 2.json响应结果的提取 3.raw响应结果的提取 1.响应结果类型 通过fiddler的respon ...

  7. python程序的模块与包

    python的程序是由模块组成的,一个python文件就是一个模块,而模块一般由代码,函数,或者类组成.创建baiduHq.py模块(文件),在该模块中编写变量,函数,类,来说明在一个模块中,变量的输 ...

  8. K近邻实战手写数字识别

    1.导包 import numpy as np import operator from os import listdir from sklearn.neighbors import KNeighb ...

  9. Spring001--事务的传播机制

    Spring事务的传播机制 本文来自于博客:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 一.事务的嵌套概念 事务的嵌 ...

  10. WPF资源字典的使用

    1.在解决方案中添加资源字典:鼠标右键——添加——资源字典 2.在资源字典中写入你需要的样式,我这里简单的写了一个窗体的边框样式 3.在App.xaml中加入刚刚新建的资源字典就好了