Django2.0中URL的路由机制
路由是关联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.对应处理函数)
路由系统:URL

普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个

django2.0 路由规则的更多相关文章

  1. Django2.0路由层-URLconf

    目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...

  2. Django2.0路由补充之path,re_path及视图层

    以下是Django2.0版本 正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下: 下面实例是匹配整数,传过去的参数就是整数 from d ...

  3. Django2.0——路由配置

    URL配置就像是Django所支撑网站的目录,它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.URL需要在urls.py进行配置,与其对应的视图函数写在views.py文件中.ur ...

  4. thinkphp5.0 路由规则配置

    开启路由‘url_route_on’ => true 首页路由'/' =>'home/index/index' 其它路由(1)'route' => 'home/index/route ...

  5. Django2.0 path和re_path使用

    Django2.0发布后,很多人都拥抱变化,加入了2的行列.但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下: 一.实例 先看一个例子: from django.urls i ...

  6. Django2.0 URL配置

    一.实例 先看一个例子: from django.urls import path from . import views urlpatterns = [ path('articles/2003/', ...

  7. Django2.0 URL配置详解

    转自:https://www.cnblogs.com/feixuelove1009/p/8399338.html Django2.0发布后,很多人都拥抱变化,加入了2的行列. 但是和1.11相比,2. ...

  8. 《玩转Django2.0》读书笔记-编写URL规则

    <玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...

  9. Django2.0中URL的路由机制

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

随机推荐

  1. Windows 7系统下安装和卸载删除IE的方法

    1.首先按下 Windows +R 键打开“运行”的窗口,请输入“appwiz.cpl”. 2.在「程序和功能」窗口上按下左上的「查看已安装的更新」. 3.找到「Windows Internet Ex ...

  2. sap 创建odata服务,通过http向数据库 进行增删改查

    https://blog.csdn.net/stone0823/article/details/71057172 1:通过 事物码 se11 创建 数据库表  zemp.表 zemp中 含有empid ...

  3. 继承时,当父子类都具有相同的成员变量,默认情况下是直接调用子类的成员变量,当要调用父类的成员变量则需要使用super关键之

    package day02; public class Person { String name="fl"; }class Car{ }class Student extends ...

  4. k8s 容器的生命周期钩子

    钩子有两个一个容器起之前定义一个动作PostStart,容器关闭之前定义一个动作PreStop 动作可以是一个命令或http请求 示例 spec: containers: - lifecycle: p ...

  5. 第一天 Linux基础篇

    课程介绍 1.认识Linux的不同版本 2.以及应用领域 3.文件和目录 4.Linux命令概述 5.Linux命令-文件 6.Linux命令-系统管理-磁盘管理 认识Linux 什么是操作系统  生 ...

  6. Apache 强制Http跳转Https

    找到网站根目录的.htaccess文件,添加如下代码 RewriteEngine On RewriteCond %{SERVER_PORT} RewriteRule ^(.*)$ https://%{ ...

  7. Angular1和Aangular4剖析

    字面解析: 1.Angular1又名angularJs,从angular2,angular4都不带JS 2.变化:angular2跳转到angular4 架构: 1.angular1是基于MVC 2. ...

  8. 【产品案例】我是如何从零搭建起一款健身O2O产品的?

    作者: Wander_Yang 我在年初参与到“SHAPE”这款健身产品的研发中,也算是第一次以产品经理的身份,从0开始负责一个产品的建立. 产品是一款O2O的智能健身连锁店,目前产品已经上线8个月, ...

  9. Charles 使用教程

    Charles 的简介 如何安装 Charles 将 Charles 设置成系统代理 Charles 主界面介绍 过滤网络请求 截取 iPhone 上的网络封包 截取 Https 通讯信息 模拟慢速网 ...

  10. Linux基础(二)centOS7密码重置

    之前安装linux的时候,为了安全起见,起了一个非常特别的,长的密码.然后,就不记得了密码. 下面通过进入单用户模式,就行挽救. 1>重启系统,在系统菜单选择页按 [上下方向键],使界面停在该界 ...