路由是关联url及其处理函数关系的过程。Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称。

Django的路由都写在urls.py文件中的urlpatterns列表中,由path()或re_path()作为元素组成。

Django的URL路由流程:

1  Django查找全局urlpatterns变量(urls.py)

2  按照先后顺序,对URL逐一匹配urlpatterns每个元素

3  找到第一个匹配时停止查找,根据匹配结果执行对应的处理函数。

4  如果没有找到匹配或出现异常,Django进行错误处理

注意:

Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即,只要URL相同,无论POST、GET等哪种请求方式都指向同一个操作函数。

Urlpatterns中的path()处理字符串路由,re_path处理正则表达式路由。

其格式:

urlpatterns=[

path(route,views.函数名,向处理函数提供的额外参数,以字典形式表示,该URL模式的别名),

re_path(正则表达式,view.对应的处理函数)

]

其中正则表达式可以看做字符串的模式。

Django支持三种表达route:

1、       精确字符串格式:articles/2017/

一个精确URL匹配一个操作函数;最简单的形式,适合对静态URL的响应;URL字符串不以“/”开头,但要以“/”结尾

2、       Django的转换格式:<类型:变量名>,articles/<int:year>/

是一个URL模版,匹配URL同时在其中获得一批变量作为参数;是一种常用形式,目的是通过URL进行参数获取和传递

转换格式类型

说明

Str

匹配除分隔符(/)外的非空字符,默认类型<year>等价于<str:year>

Int

匹配0和正整数

Slug

匹配字母、数字、横杠、下划线组成的字符串,str的子集

Uuid

匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00

path

匹配任何非空字符串,包括路径分隔符,是全集

3、       正则表达式格式:articles/(?p<year>[0-9]{4})/

借助正则表达式丰富语法表达一类URL(而不是一个);可以通过<>提取变量作为处理函数的参数,高级用法;使用该方法时,前面不能使用path()函数,必须使用re_path()函数;表达的全部是str格式,不能是其他类型。

两种形式:不提取参数,比如re_path(articles/([0-9]{4}/,表示四位数字,每一个数字都是0到9的任意数字;提取参数,命名形式(?P<name>pattern),比如re_path(articles/(?P<year>[0-9]{4})/,将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year,

当视图函数路径较多时,可以使用Include()用法进行去重:

 
urlpatterns=[

path(‘<page_slug>-<page_id>/history/’,views.history),

path(‘<page_slug>-<page_id>/edit/’,views.edit),

]
 

等价于:

 
Urlpatterns = [

path(‘<page_slug>-<page_id>/’,include([

      path(‘history/’,views.history),

      path(‘edit/’,views.edit),

]
 

当网站功能较多时可以在该功能文件夹里建一个urls.py文件,将该功能模块下的url全部写在该文件里。但是要在全局的urls.py中使用include方法实现url映射分发。

例如:网站有论坛模块,则在论坛模块下建个urls.py文件,将与论坛相关的页面的url全部写在这个文件里,然后在全局的urls.py文件里这样写:

 
from django.urls import path,include

urlpatterns = [

    path('admin/', admin.site.urls),
path('ant_test/',include('ant_test.urls'))
]
 

在论坛模块下的urls.py文件这样写:

from django.urls import path
urlpatterns = [ path('news/',views.news), ]

在views.py中写对应的news函数即可。

  Django2.0版本中path(route,views.对应处理函数)等价于低版本的url(r'^route/$’,views.对应处理函数)

Django2.0中URL的路由机制的更多相关文章

  1. Django2.0中得url路由path得用法

    Django2.0中,url得匹配规则更新了,在django1.0中,url是用正则表达式书写得,相对来说比较繁琐一些,在django2.0中进行了升级优化,改为了path from django.u ...

  2. django 2.0 中URL的include方法使用分析

    一.问题出现: 在使用Django2.0,配置全局URL时,希望指向某个APP的URL,配置如下: from django.contrib import admin from django.conf. ...

  3. Django2.0中文文档

    title: Django2.0中文文档 tags: Python,Django,入沐三分 grammar_cjkRuby: true --- Django2.0版本已经发布了,我们先来看一个图片 从 ...

  4. Django2.0中基于正则表达式的路由机制(一)

    1.  在urls.py的文件中导入操作正则表达式的方法:(新版的Django是使用path方法对URL进行路由分配) from django.contrib import admin from dj ...

  5. Django2.x中url路由的path()与re_path()参数解释

    在新版本Django2.x中,url的路由表示用path和re_path代替,模块的导入由django1.x版本的from django.conf.urls import url,include变成现 ...

  6. Django2.0中的urlpattern匹配不输入任何网址时的写法

    如果使用urlpattern匹配不输入任何网址时,应该如何写? 例如:仅匹配http://127.0.0.1:8000/时想要跳转到某个页面,这时urlpattern中的url规则应该写成: 情况1: ...

  7. yii2.0中url重写实现方法

    在yii框架里有前台和后台页面,举例前台url重写. 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰 ...

  8. django2.0设置默认访问路由

    搭建完毕后,打开域名,直接来个报错,如果没有访问的地址,是不合适的 在urls.py中定义,默认访问的路由 from django.contrib import admin from django.u ...

  9. 【Django笔记四】Django2.0中的表单

    一.环境版本信息: 操作系统:windows10 Django版本:2.0.5 Python版本:3.6.4 Mysql版本: 5.5.53   安装mysql 二.基础信息 1.App中的模型mod ...

随机推荐

  1. transform动画效果

     transform动画效果 transform :移动,旋转.倾斜.缩放.     transform:translate(0,300px); x代表的是水平的偏移距离,y代表垂直的.      t ...

  2. ActiveMQ与SpringMVC整合实现发送PTP和订阅发布消息功能

    实现一个基于SpringMVC+JMS+ActiveMQ+Tomcat+JDK1.8+IDEA工具 ,Spring4.1.0和ActiveMQ5.15整合的实例,实现PTP和订阅/发布两种消息模型 一 ...

  3. python(32):多进程(2) multiprocessing

    python 多线程:多线程 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心. Python提供了非常好用的多进程包multiprocessing,你只需要 ...

  4. Python构造方法、析构方法和单例模式

    一.__init__()方法 __init__()通常在初始化一个类实例的时候调用,如: class Student(object): def __init__(self,name,age): sel ...

  5. vue总结 02指令

    指令 v-text 预期:string 详细: 更新元素的 textContent.如果要更新部分的 textContent ,需要使用 {{ Mustache }} 插值. 示例: <span ...

  6. 【小程序开发总结】微信小程序开发常用技术方法总结

    1.获取input的值 <input bindinput="bindKeyInput" placeholder="输入同步到view中"/>   b ...

  7. 【本地服务器】用nodejs搭建最简单、轻量化的http server

    1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后台语言. 但是你制作出来的网页总要运行.总要测试吧?——那就免不了用到http server.我先前都是用vis ...

  8. python网络编程--进程池

    一:进程池 进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程, 如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止. 进程池中有两个方法: apply a ...

  9. jQuery之字体大小的设置

    先获取字体大小,进行处理. 再将修改的值保存. slice() 方法可从已有的数组中返回选定的元素.arrayObject.slice(start,end).start     必需.规定从何处开始选 ...

  10. 写在用Mac进行Java开发之前

    在用Mac进行开发之前,建议浏览以下几个概念. 1. 几个基础概念 - 计算机 计算机(computer)俗称电脑,发明者是约翰·冯·诺依曼,计算机是现代一种用于高速计算的电子计算机器,可以进行数值计 ...