URL-Pattern浅析

一、urlpatterns有什么用

urlpatterns是一个列表,用于将url与视图函数或类相关联。在Django中,我们编写的所有视图函数/类都需要通过urlpatterns来进行路由分发。

urlpatterns通常被定义在项目的urls.py文件中。例如:

from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index, name='index'),
    path('login/', views.login, name='login'),
]

在这个示例中,我们将’/index/’和’/login/’这两个URL路径与index()和login()视图函数相关联。当用户访问’/index/’时,Django会调用index()视图函数。

二、urlpatterns的值怎么设置

我们可以将urlpatterns看作一个列表,列表中的每一个元素都代表一个URL与视图函数/类的映射关系。

在Django中,我们通常使用path()函数或re_path()函数来设置urlpatterns的值。path()函数用于通用的URL匹配,而re_path()函数则可以使用正则表达式进行更加灵活的匹配。

具体使用如下:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('index/', views.index, name='index'),
    path('articles//', views.article_year),
    re_path(r'^articles/(\d{4})/(0?[1-9]|1[012])/$', views.article_month),
]

在这个示例中,我们使用path()函数将’/index/’路径与index()视图函数相关联,同时使用了一个具有参数的视图函数(article_year())。

另外,我们还使用了re_path()函数来匹配形如’/articles/2019/05/’这样的路径,并与具有参数的视图函数(article_month())相关联。

三、urlpattern怎么匹配好

在Django中,URL匹配是按照顺序进行的。当用户发起请求时,Django系统按照urlpatterns中定义的顺序逐一检查每一个URLpattern,直到匹配到一个合适的URLpattern为止。

例如:

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login, name='login'),
    path('login/forgot/', views.forgot, name='forgot'),
    path('login/register/', views.register, name='register'),
]

在这个示例中,如果用户访问’/login/forgot/’路径,Django会去匹配urlpatterns中的第一个pattern,即’login/’。由于’login/’并不匹配,Django会继续匹配第二个pattern:’/login/forgot/’。此时成功匹配。

注意,urlpatterns中的值匹配时是按照从上到下的顺序进行的。因此,如果定义下面的urlpatterns:

from django.urls import path
from . import views

urlpatterns = [
    path('users/', views.users, name='users'),
    path('users/new/', views.new_user, name='new_user'),
    path('users//', views.user_detail, name='user_detail'),
    path('users//edit/', views.edit_user, name='edit_user'),
]

如果用户访问’users/3/edit/’,Django将会先匹配’users/’和’users/new/’。这两个pattern都不匹配,然后再匹配’users/<int:user_id>/’这个pattern。即使’users/<int:user_id>/’后面也定义了一个匹配’users/<int:user_id>/edit/’,也不会被执行。

四、patterns选取

下面是三个与url-pattern相关的patterns:

1、将URLpattern分离到单独的模块中

# urls.py
from django.urls import include, path

from . import views

urlpatterns = [
    path('', views.index),
    path('accounts/', include('django.contrib.auth.urls')),
    path('blog/', include('blog.urls')),
    # ...
]

在这个示例中,我们将账户应用的URLpattern放到了/accounts/路径中,并将’blog/’的URLpattern放到了blog应用中。这可以使urls.py文件更加整洁,也可以方便地管理多个不同的URLpattern。此外,使用include()函数还可以允许其他应用中的URLpattern在你的应用中被重复使用。

2、使用正则表达式进行URL匹配

# urls.py
from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^search/(?P<query>\w+)/(?P<page>\d+)/$', views.search_results),
]

在这个示例中,我们使用了re_path()函数并使用正则表达式进行URL匹配。使用捕获组(?P<>),我们将查询(query)和页数(page)作为参数传递给搜索结果视图函数(search_results())。

3、设置URL名称

# urls.py
from django.urls import path
from myapp import views

urlpatterns = [
    path('blog/', views.BlogListView.as_view(), name='blog'),
]

在这个示例中,我们为URLpattern指定了一个名称’blog’。通过指定URL名称,我们可以在其他地方引用该URL,例如模板中的链接。

原创文章,作者:QXPI,如若转载,请注明出处:https://www.506064.com/n/145677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
QXPIQXPI
上一篇 2024-10-27 23:52
下一篇 2024-10-27 23:52

相关推荐

  • Python解码URL

    本文将从以下几个方面对Python解码URL进行详细阐述:URL编码的作用和原理、Python urllib库解码URL的基本用法、Python手动解码URL的方法、特殊字符在UR…

    编程 2025-04-28
  • Python URL解码

    在Web开发过程中,URL编码和解码是一个很常见的问题。本文将会详细介绍Python中对URL的解码方法。 一、URL编码与URL解码 URI(Uniform Resource I…

    编程 2025-04-28
  • Python 中文转URL编码

    本文将从以下几个方面详细阐述Python中实现中文转URL编码的方法及注意事项。 一、URL编码概述 URL编码也称为百分号编码,是一种将URL中的非ASCII字符转换成“%”后加…

    编程 2025-04-27
  • HTTPs请求URL里的参数会加密吗?

    是的,HTTPS请求URL里的参数会加密。HTTPS是HTTP协议的加密版本,在传输数据时,使用了SSL/TLS协议对传输内容进行加密,保证数据在传输过程中不会被篡改、窃取。下面我…

    编程 2025-04-27
  • 从多个方面讲解URL生成二维码

    一、二维码技术简介 二维码是一种用于储存信息的矩阵条形码,现已广泛应用于各种应用场景,如门票、支付、证件等。二维码由黑、白模块组成,其中黑块表示二进制数字1,白块表示0,通过图像处…

    编程 2025-04-25
  • no all pattern found

    一、概述 no all pattern found常见于正则表达式中,表示在所给的字符串中无法匹配到完整的模式。这个问题一般出现在正则表达式使用不当时。 二、可能出现问题的情况 1…

    编程 2025-04-23
  • URL最长支持多少字符

    一、GET请求URL最长支持多少字符 GET请求是HTTP协议中最常用的请求方式之一,而GET请求的参数是通过URL后面的参数进行传递的,但是URL的长度是有限制的,对于不同的浏览…

    编程 2025-04-23
  • 图片URL转Base64完整教程

    一、前言 在日常开发中,图片URL转Base64是一个比较常见的需求,它可以使图片在网络传输中更加快速、安全。图片URL转Base64是把图片URL转化为一个以base64编码的字…

    编程 2025-04-23
  • JavaScript URL编码与解码

    一、URL编码与解码概述 在Web开发中,有时需要将字符串传递给URL。由于某些字符会在URL中具有特殊含义(例如?、&、=等),因此需要进行URL编码以确保这些字符被正确…

    编程 2025-04-13
  • %url%详解

    在互联网时代,URL(统一资源定位符)是一个不可或缺的概念。作为浏览器中访问网页的地址,任何一位编程开发工程师都需要了解URL的相关知识。本文将从多个方面对URL进行详细的阐述。 …

    编程 2025-04-12

发表回复

登录后才能评论