django2.0 路由规则

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接收,推荐使用这个

原文地址:https://www.cnblogs.com/linwenbin/p/10515574.html

时间: 2024-10-08 06:25:56

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

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

以下是Django2.0版本 正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下: 下面实例是匹配整数,传过去的参数就是整数 from django.urls import path,re_path path('admin/<int:year>,view.year.archive') ===>匹配到一个整数变量 Django默认支持以下5个转化器: str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式 int,匹配

Django2.0 URL配置

一.实例 先看一个例子: from django.urls import path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive

六、Asp.Net MVC4.0开发CMS系统案例之路由规则修改

今天开放的时候,发现如果我要把生成View视图页csthtml建立多个文件夹目录下面,contraller就找不到了.实际开发工作中,不可能所有生成的视图都放在View下面的一级文件夹下,对于系统的代码管理不是十分科学,于是我就尝试如何让它实现. 比如登录功能,控制器建立的路径为:Contrallers/Sys/Com/UserContraller.cs.如图: 系统添加视图默认生成View的路径为:View/User/UserLogin.cshtml.如果我要把路径改为View/Sys/Com

Django2.0中URL的路由机制

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 找到第一个匹配

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

Django2.0中,url得匹配规则更新了,在django1.0中,url是用正则表达式书写得,相对来说比较繁琐一些,在django2.0中进行了升级优化,改为了path from django.urls import path 导入path模块后,可以使用啦请看截图 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/9693081.html

django2.0 path使用方法

Django2.0于2017年12月2日已经正式发布.Django2.0支持Python3.4,3.5以及3.6,移除了对Python2.7的支持.官方强烈建议Python 3.x使用最新的版本. 在Django2.0其中一个新特性为:简化Url路由的语法. 在代码上主要体现在新增了django.urls.path函数,它带来了更简洁.更可读的路由语法,如: 原来的url url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), D

5 Django-2的路由层(URLconf)

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 简单的路由配置 from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_p

dubbo之路由规则

向注册中心写入路由规则:(通常由监控中心或治理中心的页面完成) RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181")); re

thinkphp学习笔记10—看不懂的路由规则

路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到“要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),” , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: pathinfo(PHP 4 >= 4.0.3, PHP 5)path