iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >django URL (路由系统)
  • 614
分享到

django URL (路由系统)

路由系统django 2023-01-30 22:01:12 614人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉DjanGo,对于这个URL调用这段代码,对于那个URL调用那段代码。语法:urlpat

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉DjanGo,对于这个URL调用这段代码,对于那个URL调用那段代码。

语法:

urlpatterns = [
    path(正则表达式, views视图函数,参数,别名),
]

参数说明:


一个正则表达式字符串

一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串

可选的要传递给视图函数的默认参数(字典形式)

一个可选的name参数


无命令分组

举例:

修改mysite目录下的urls.py,最后一行添加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('userInfo/', views.userInfo),
    #完全匹配,必须是articles/2003/,后面加其他的,也会报404
    path('articles/2003/', views.special_case_2003),
]

修改blog目录下的views.py,添加函数special_case_2003

def year_arcHive(req,year):
    #在Django1.x里,我们需要对year做类型转换:
    #year = int(year)
    #在2.0里面,不需要转换year
    return HttpResponse(year)

访问url

http://127.0.0.1:8000/articles/2003/

页面输出:2003

如果访问以下链接

http://127.0.0.1:8000/articles/2003/01

页面提示404,因为它是完全匹配

Page not found (404)


有命令分组(推荐)

上面匹配年份的,可以改写成这样:

如果需要匹配年份,年份是4位数据,需要使用正则匹配,那么需要导入re_path模块,代码如下:

from django.contrib import admin
from django.urls import path,re_path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('userInfo/', views.userInfo),
    #正则匹配4位整数
    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),

访问url

http://127.0.0.1:8000/articles/2004/

页面输出:2004

访问2008,同样也可以输出2008


在Django2.0其中一个新特性为:简化Url路由的语法

上面的url,可以使用Django2.0新语法

path('articles/<int:year>/', views.year_archive),

它支持url参数的类型转化。例子里的year_archive函数接收到的year参数作为参数

并且会自动转换year为整型而不是字符串。


URL参数捕获

在新的语法里,url字符串有以下规则:

    1.在url里使用尖括号“<>”来捕获值

    2.尖括号捕获值的格式<converter:name>。其中converter为路径转换器,name为参数名,如<int:year>。对于捕获的值没有路径转换器,那么它会匹配除了斜杠"/"外的所有字符作为捕获的值。

    3.url不需要以斜杠开头。


代码示例:

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

views.py相关函数如下:

def special_case_2003(request):
    return HttpResponse('2003')

def year_archive(request,year):
    return HttpResponse(year)

def month_archive(request,year,month):
    return HttpResponse('{}/{}'.fORMat(year,month))

def article_detail(request,year,month,slug):
    return HttpResponse('{}/{}/{}'.format(year,month,slug))


匹配示例:


/articles/2005/03/:匹配到第3个规则,调用views.month_archive(request, year=2005, month=3)

/articles/2003/:匹配到第1个规则,调用views.special_case_2003(request)

/articles/2003/as:没有匹配到规则,原因是所有的规则都是以斜杠结尾

/articles/2003/03/building-a-django-site/:匹配到第4个规则,调用views.article_detail(request, year=2003, month=3, slug=”building-a-django-site”)


分别访问页面:

http://127.0.0.1:8000/articles/2005/03/

页面输出:2005/3


http://127.0.0.1:8000/articles/2003/

页面输出:2003


http://127.0.0.1:8000/articles/2003/as

页面输出:Page not found (404)


http://127.0.0.1:8000/articles/2003/03/building-a-django-site/

页面输出:2003/3/building-a-django-site


Path Converter

url里捕获的值使用Path Converter来对值做转换,如类型转换。Django2.0自带了默人的Path Converter,同时也支持自定义Path Conveter。


默认Path converter

Django2.0自带的PathConveter包括:


    str:匹配除了路径分隔符(/)之外的非空字符串,如果没有转换器,默认使用str作为转换器。

    int:匹配0及正整数。

    slug:匹配字母、数字以及横杠、下划线组成的字符串。

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

    path:匹配任何非空字符串,包含了路径分隔符(/)


注册自定义Path Converter

当默认的Path Converter不能满足需求时,Django2.0支持用户注册自定义的Path Converter。


Path Converter是一个类,定义Converter类需要包含下面的属性或方法:


    regex属性,字符串类型

    to_python(self, value) 方法,它处理将匹配的字符串转换为应该传递给view函数的类型。 如果它不能转换给定的值,它应该抛出ValueError。

    to_url(self, value) 方法,和 to_Python 相反,它会将Python类型转换为在URL中使用的字符串。


示例:

定义Path Converter

新建一个converters.py文件,与urls.py在同一目录下,写一个类,内容如下:

class FourDigitYearConverter:
    regex = '[0-9]{4}'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return '%04d' % value

写完类后,使用reGISter_converter()注册Converter到url配置里,并使用它。如下所示,注册了一个yyyy:

修改urls.py,内容如下:

from django.contrib import admin
#增加register_converter方法
from django.urls import path,re_path,register_converter
from blog import views
#导入converters模块
from . import converters
#使用register_converter()注册Converter到url配置里,并使用它,注册了一个yyyy
register_converter(converters.FourDigitYearConverter, 'yyyy')

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<yyyy:year>/', views.year_archive),
]

访问链接

http://127.0.0.1:8000/articles/2003/

匹配第一条规则,页面输出2003


http://127.0.0.1:8000/articles/2018/

匹配第二条规则,页面输出2018


--结束END--

本文标题: django URL (路由系统)

本文链接: https://www.lsjlt.com/news/179132.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • django URL (路由系统)
    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。语法:urlpat...
    99+
    2023-01-30
    路由 系统 django
  • Django的URL路由系统
    一. URL配置   URL配置就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图之间的映射表.你就是以这种方式告诉Django,对于哪个URL调用的这段代码.   基本格式 from django.conf.u...
    99+
    2023-01-30
    路由 系统 Django
  • Django之路由系统
    URL配置(URL.conf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数. URLconf配置 基本格式: ...
    99+
    2023-01-30
    路由 系统 Django
  • Django中怎么创建URL路由
    在Django中,可以通过在项目的urls.py文件中定义URL路由来创建路由。以下是一个简单的例子: 在项目的urls.py文件...
    99+
    2024-03-05
    Django
  • Django路由层如何获取正确的url
    目录前言 Tips - django版本区别 路由匹配 无名分组&有名分组 无名分组 有名分组 小提示 反向解析 路由不涉及分组的反向解析 有名分组&无名分组的反向解...
    99+
    2024-04-02
  • django中url路由配置及渲染方式
      今天我们学习如何配置url、如何传参、如何命名、以及渲染的方式,内容大致有以下几个方面。 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式   项目中自带的Pyth...
    99+
    2023-01-30
    路由 方式 django
  • Django之路由层
      url配置就像Django所支撑网站的目录。它的本质是url与要被该url调用的视图函数之间的映射表;通过这个映射表可以告知Django,对于客户端发来的某个url该执行那些代码。   一、简单的路由配置 from django.u...
    99+
    2023-01-30
    路由 Django
  • Django的路由控制
    Django的路由控制URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行一般来说,...
    99+
    2023-01-30
    路由 Django
  • django路由基本使用-6
    路由定义位置 django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的。 urls.py 文件是路由解析的入口。 from django.conf.urls import url from . import ...
    99+
    2023-01-30
    路由 django
  • Django框架之路由用法
    简介 路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序,并返回处理结果,也就是 URL 与 Django 的视图建立映射关系。 Django 路由在 urls.py...
    99+
    2024-04-02
  • Django URL和View的关系说明
    URL和View的关系 1、每次用户发来一个HttpRequest请求,Django会用URL_pattern与请求进行匹配,匹配到第一个URL_pattern就会把请求转向对应的v...
    99+
    2024-04-02
  • Linux系统中如何查看路由表
    这篇文章将为大家详细讲解有关Linux系统中如何查看路由表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。路由表简介:在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Rou...
    99+
    2023-06-28
  • Django多app路由分发(纯后端)
    目录1、环境搭建2、生成django项目3、创建app4、在每个app下创建templates文件夹,用于创建html页面5、每个app创建urls.py用于构建每个app的分路由6...
    99+
    2024-04-02
  • Django框架之路由怎么使用
    这篇文章主要介绍“Django框架之路由怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Django框架之路由怎么使用”文章能帮助大家解决问题。简介路由简单的来说就是根据用户请求的 URL 链...
    99+
    2023-07-02
  • H3C OSPF引入自治系统外部路由
    1.13.2 配置OSPF引入自治系统外部路由 组网需求• • 所有的交换机都运行 OSPF,整个自治系统划分为 3 个区域。• • 其中 Switch A 和 Switch B 作为 ABR 来转发区域之间的路由。• • 在 Sw...
    99+
    2023-01-31
    路由 系统 H3C
  • Laravel 和 CodeIgniter 的路由系统有何不同?
    laravel和codeigniter使用不同的路由系统:laravel:使用流畅api,支持命名路由和动态路由。codeigniter:使用xml文件定义路由,支持正则表达式和路由组。...
    99+
    2024-05-11
    laravel
  • Vue怎么不通过路由获取URL参数
    这篇文章主要介绍“Vue怎么不通过路由获取URL参数”,在日常操作中,相信很多人在Vue怎么不通过路由获取URL参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么不通过路由获取URL参数”的疑惑有所...
    99+
    2023-07-06
  • Django URL和View的关系是什么
    这篇文章主要介绍“Django URL和View的关系是什么”,在日常操作中,相信很多人在Django URL和View的关系是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django URL和View...
    99+
    2023-06-14
  • Win7系统中如何设置dink路由器
    这篇文章主要为大家展示了“Win7系统中如何设置dink路由器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Win7系统中如何设置dink路由器”这篇文章吧。先将路由器与电脑链接用网线将路由器和...
    99+
    2023-06-28
  • Linux系统中怎么配置静态路由
    这篇文章主要讲解了“Linux系统中怎么配置静态路由”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中怎么配置静态路由”吧!主机只有一块网卡的时候,不会涉及到默认路由和静态路由的...
    99+
    2023-06-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作