Django的URL调度
1、URLconf (URL configuration):(Django版本1.11.20,其它版本可能各有差异。)
在Django中Python后端与前端URL进行交互,是通过一个名为urlconf(URLconfiguration)的python模块。这个模块是纯Python代码,该模块是在一个名为urls.py文件下的urlpatterns 列表中进行匹配,匹配到一个URL便执行对应的函数,不在继续向下查找。该列表的元素格式如下:
from django.conf.urls import url
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(正则表达式, views视图函数,参数,别名), # 参数和别名初期可以不用写
]
urlpatterns中的url(正则表达式, views视图函数,参数,别名),它的主要作用就是将正则表达式与views视图函数进行映射,也就是告诉Django前端正则表达式的页面需要执行哪个views视图函数。
1.1 函数url(正则表达式, views视图函数,参数,别名)
参数说明
- 正则表达式:一个正则表达式字符串。
- views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串。
- 参数:可选的要传递给视图函数的默认参数(字典形式)。
- 别名:一个可选的name参数。
下面执行一个简单的示例:
1.1.1创建一个damo_1的项目

1.1.2在templates文件夹下创建一个test.html文件,这里简单输出"Hello World"。
1.1.3在urls.py文件夹下的urlpatterns列表中添加一个元素url(r'^show_page/', views.show_page)。
1.1.4在app文件夹下的views.py中添加一个函数show_page(request)。
完成上面三步后,看起来向下面这个样子:

1.1.5运行Django项目,看到下面这个样子说明运行成功。

1.1.6访问项目。
这里需要注意的是要访问127.0.0.1:8000/show_page/也就是我们在urls文件中添加的那条记录中的正则表达式字符串,如果不写默认是找不到页面的,如下:

我们在端口后把这个路径加上,在查看如下:

1.2 APPEND_SLASH
Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。其效果就是:我们定义了urls.py:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^show_page/', views.show_page),
]
访问 http://127.0.0.1/show_page 时,默认将网址自动转换为 http://127.0.0.1/show_page/ 。
如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://127.0.0.1/show_page 时就会提示找不到页面。
1.3分组命名匹配
可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。
下面是以上URLconf 使用命名组的重写:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^show_page/(?P<num>[0-9]{4})/$', views.show_page), # 分组命名
]
需要注意的是这里写了分组,name对应的在views中的show_page(request,num)也需要添加一个和分组名一样的参数,否则会报如下错误

所以当我们使用命名分组后,看起来像下面这个样子:

运行Django后,再次访问项目:

URLconf匹配的位置
URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。
例如:http://127.0.0.1:8000/show_page/请求中,URLconf 将查找show_page/。
在http://127.0.0.1:8000/show_page/?page=100 请求中,URLconf 仍将查找show_page/。
URLconf 不检查请求的方法, 同一个URL的POST、GET、HEAD等等 —— 都将路由到相同的函数。
1.4URL分发
在实际中我们的网站有许多的功能,而且每个功能下都有很多URL,这时,我们把所有的URLconf配置都写在一个文件里显然是不合理的。所以Django为我们提供了URL分发机制,使用include来包含其他模块下的URLconf。
1.4.1 我们在templates文件夹下在创建一个页面damo页面,页面显示“This is app_01”,页面看起来像下面这样:

1.4.2在终端中在新建一个app文件:Python37 manage.py startapp app_01

执行完成后,会在项目中新增一个app_01,看起来像下面这样

由于是我们手动建立的,所以我们还需要到setting文件中添加添加一条记录,如下:

1.4.3将damo_1中的urls文件复制到app文件夹和app_01文件夹中。
1.4.4在app_01的urls文件中添加一条路由,并在对应的app_01下的views文件中添加函数,添加后看起来像下面这个样子:

1.4.5在damo_1文件夹下的urls模块中进行路由分发,设置好后看起来像下面这个样子:

访问页面如下:

1.4.6 传递额外参数给视图函数
在app文件夹下进行演示,urls、views、test.html文件配置后如下所示:

需要注意的是传递参数的键必须和视图函数的形参名字一样。
重启Django访问网页,看到内容如下:

Django的URL调度的更多相关文章
- Django 源码小剖: 更高效的 URL 调度器(URL dispatcher)
效率问题 django 内部的 url 调度机制说白了就是给一张有关匹配信息的表, 这张表中有着 url -> action 的映射, 当请求到来的时候, 一个一个(遍历)去匹配. 中, 则调用 ...
- Django 源码小剖: URL 调度器(URL dispatcher)
在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的 ...
- django url调度
Django的url配置相同遵循着DRY(dont repeat yourself)的规则.下面都是官方文档的样例: 首先介绍的是Django怎样处理http的请求: 1.在setting里定义ROO ...
- python之Django学习笔记(三)---URL调度/URL路由
在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...
- URL 调度器(URL dispatcher)
URL 调度器(URL dispatcher) 在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 UR ...
- Django的url解析
Django中采用正则表达式来匹配所请求的url,这个叫做URLconf,作为MVC中的C(控制器), 这样再调用相应的试图,达到控制器控制试图的显示的效果. 看一下Django的url解析过程 第一 ...
- Django中url匹配规则的补充
Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...
- Django中url使用命名空间的错误
出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) ...
- django中url路由配置及渲染方式
今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...
随机推荐
- 【Matlab&Mathematica】对三维空间上的点进行椭圆拟合
问题是这样:比如有一个地心惯性系的轨道,然后从轨道上取了几个点,问能不能根据这几个点把轨道还原了? 当然,如果知道轨道这几个点的速度的情况下,根据轨道六根数也是能计算轨道的,不过真近点角是随时间变动的 ...
- JVM之垃圾收集器
前一篇讲了垃圾收集算法--JVM之GC算法.垃圾收集算法——标记-清除算法.复制算法.标记-整理算法.分代收集算法,如果把它看作是方法论,那么下面说的就应该是内存回收的具体实现. 先看一下JVM中有哪 ...
- Java对象引用/JVM分级引用——强引用、软引用、弱引用、虚引用
无论是通过引用计数法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判断对象是否存活都与“引用”有关, 相关资料:如何判断对象是否存活/死去 那么引用究竟是什么?让我们一起来看一下 ...
- 音频处理EQ的基本概念
我们通常所说的人声,歌声以及乐声都是一个复合音,也就是由声音的基音和一系列的泛音所构成的.这些泛音都是基音频率的倍数,物理学中叫分音,电声学中叫谐波,音乐中则把它们称做泛音.可以说,泛音对音色的特性 ...
- synchronized的四种作用域以及不能被继承解析
synchronized是java中用于同步的关键字,其典型的作用域如下所示. 1 对象锁 @Slf4j public class SynchronizedExample1 { private fin ...
- TensorFlow使用GPU
查看机器 GPU 的信息: nvidia-smi 持续更新查看: nvidia-smi -l 其他方式如下: import os # 使用GPU0 和 GPU1 os.environ['CUDA_VI ...
- ToastCustom【自定义显示风格的Toast】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 基于系统Toast的自定义显示风格的Toast. 效果图 代码分析 ToastCustom类基于系统Toast,不是继承Toast, ...
- Window环境下配置MySQL 5.6的主从复制、备份恢复
1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 navicat无法连接MySQL8解决方案 #修改加密规则 A ...
- RDIFramework.NET V3.3 Web版新增系统公告、系统新闻模块方便需要的客户
1.系统新闻功能描述 在RDIFramework.NET V3.3版本中新增了系统新闻模块,用户可以根据实际情况做相应应用,如用在内部业务系统的展示中或网站上新闻的展示.新闻可以分类进行管理,非常的实 ...
- DS控件库 一个简单的血条颜色渐变方案
Private Sub DS按钮1_ButtonClick(Sender As Object) Handles DS按钮1.ButtonClick Dim T As New Threading.Thr ...