路由系统

当我们启动一个django项目后,想要通过浏览器访问到django项目中的资源

就需要在django中的urls项目中进行路由配置

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/', test1),
]

这样就可以在浏览器访问到jango中的函数

然而在这个urls文件开头注释中,就已经告诉了我们url后面可以跟以下三种

Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))

我们又了解到,只有当一条路由最后匹配到一个函数之后,这条路由才算结束

1. 路由匹配跟函数名

  上面的第一种就是直接跟函数,表示一条路由的终止

2. 路由匹配跟类调用as_view方法

  第二种跟的是类,调用了as_view()的方法,我们可以看一下as_view方法帮我们实现了什么

函数加括号优先级最高,会优先执行

首先,走了as_view的类绑定方法

然后在as_view中生成了一个闭包函数view,在该函数中把类实例化长生对象,并把dispatch方法的结果返出来

然后as_view的返回值其实这个view函数对象,所以这种方法的本质还是跟的函数

如果你想了解cbv的执行过程,可以接着去dispatch方法中看一看,今天我们着重讲解下面的路由分发include

3. 路由分发

写法: 通过include把以及路由分发下去

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/', include('app01.urls')),
]

1. 首先我们来了解一下include函数内部帮我们干了什么

通过以上的分析我们知道,include帮我们干的事情其实是导入字符串写的模块,并以元组的形式返回

也就说  include('app01.urls') 和 导入urls之后的这种写法 (urls, None, None) 本质上是没有区别的

2.  我们再来看一下url()干了什么事

这样我们大致可以理解为,他把我们的(模块对象,None,None) 转换成了(列表,None,None)

3. 既然分析到了这里, 那么我直接在路由匹配通过这种 (列表,None,None) 应该也是不成问题的

确实就是如此,这也是我们路由分发的本质

urlpatterns = [
url(r'^test/', ([ # 这里是分一级路由
url(r'^test_1', ([ # 这是分的二级路由,我们可以通过这种方式无限往下分
url(r'^test_1_1', test_1_1),
url(r'^test_1_2', test_1_2)
],None, None)),
url(r'^test_2', test_2),
],None, None)), ]

注意: 只有当路由匹配后面跟的是函数对象时,这条路由才算结束,否则如果是([],None,None)这种,接着往下分,往下找。

django路由系统及分发路由的本质的更多相关文章

  1. Python Django之路由系统

    1.初识路由系统 路由系统是用户发请求到URL,然后URL根据路由系统重新指向到函数名的一个对应关系 2.创建project和app django-admin startproject mysite ...

  2. 11.2 Flask 配置文件,路由系统

    配置文件系统 构建 Flask 应用时指定 app = Flask( __name__, template_folder = '', # 指定存储模板文件夹名称 static_url_path = ' ...

  3. 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  4. ASP.NET的路由系统:路由映射

    总的来说,我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,通过上面的介绍我们知道这是一个类型的RouteCollection的集合对象,我们可以通过调用它的MapP ...

  5. ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...

  6. ASP.NET Web API路由系统:Web Host下的URL路由

    ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...

  7. WebApi学习总结系列第四篇(路由系统)

    由于工作的原因,断断续续终于看完了<ASP.NET Web API 2 框架揭秘>第二章关于WebApi的路由系统的知识. 路由系统是请求消息进入Asp.net WebApi的第一道屏障, ...

  8. ASP.NET Web API框架揭秘:路由系统的几个核心类型

    ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...

  9. 简简单单的Vue3(插件开发,路由系统,状态管理)

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...

随机推荐

  1. (转载)golang 整数常量INT_MAX INT_MIN最大值最小值

    转载地址:https://blog.csdn.net/bdss58/article/details/78388858 在C语言中,有标准库limits.h定义了一些最大最小值常量,例如int类型的最大 ...

  2. 剑指offer:左旋转字符串

    题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”ab ...

  3. Win 10 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问....

    按window+R键输入gpedit.msc 来启动本地组策略编辑器 依次找到“计算机配置-管理模板-网络-Lanman工作站”这个节点,在右侧内容区可以看到“启用不安全的来宾登录”这一条策略设置.状 ...

  4. bim模型中所有IfcWallStandardCase构件

    ifc中的IfcWallStandardCase构件 //执行吊装 void startHoisting() { osg::Vec3f vec3f1 = index_node1->getBoun ...

  5. mysql之各版本rpm包安装

    发现每次想用mysql的rpm包直接安装的时候,都会出现找不到对应的rpm包的情况,故记录一下查找过程 进入官网->downloads->community->mysql commu ...

  6. 通过ssh登录到手机 Termux

    安装Termux Termux官网:https://termux.com/ 安装openssh 安装好Termux后,点击图标进入,依次输入以下命令. 申请读写权限 termux-setup-stor ...

  7. [LeetCode] 310. Minimum Height Trees 最小高度树

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

  8. [LeetCode] 655. Print Binary Tree 打印二叉树

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...

  9. 算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机

    1. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 输出: [ [], [,], [,,], [ ...

  10. vs中调试程序查看变量在内存中的内容的方法

    vs中调试程序 查看变量在内存中的内容的方法 https://blog.csdn.net/guojg1988/article/details/42922149 原文链接:http://www.sows ...