1.1.9创建应用

1.在全局配置文件下找到urls.py进行路由配置

配置路由要指明哪个应用,和写好模块导入的函数

2.找到路由要启动的应用,在应用里找到视图函数进行设计

path(‘url模式/“,视图函数)

注意第五部没有/

1.1.110路由匹配模式1:精确字符串格式

假设我们有一个 Django 应用,并且希望在访问 /about/ URL 时调用一个名为 about_view 的视图函数。可以在 urls.py 文件中定义如下的路由规则:

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('about/', views.about_view, name='about'),
]

详细解释

  1. path 函数:

    • path 函数用于定义 URL 路由。它接受多个参数:
      • 第一个参数是 URL 模式,这里是 'about/',表示精确匹配 /about/
      • 第二个参数是视图函数,这里是 views.about_view,表示当 URL 匹配 'about/' 时,调用 about_view 函数。
      • 第三个参数是可选的 name 参数,用于为这个 URL 路由命名,便于在模板或其他地方引用。
  2. 精确字符串格式:

    • 在这个例子中,URL 模式 'about/' 是一个精确字符串格式。这意味着只有当请求的 URL 完全匹配 /about/ 时,才会调用 about_view 视图函数。
    • 例如,访问 http://example.com/about/ 会匹配这个路由规则,而访问 http://example.com/about(缺少尾部斜杠)或 http://example.com/about/me 则不会匹配。

视图函数示例

为了完整性,这里提供一个简单的视图函数示例:

# views.py

from django.http import HttpResponse

def about_view(request):
    return HttpResponse("This is the about page.")

 1.1.111路由匹配模式2:路径转换器格式

 

 

1.1.12路由匹配模式3:正则表达式

使用 re_path 和正则表达式匹配 URL

re_path 函数与 path 函数类似,但它允许你使用正则表达式来匹配 URL 模式。

示例

以下是一些使用正则表达式的 URL 模式示例:

from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.article_year),
    re_path(r'^users/(?P<username>\w{1,30})/$', views.user_profile),
    re_path(r'^files/(?P<file_path>.+)/$', views.file_detail),
    re_path(r'^items/(?P<item_id>[0-9a-fA-F-]{36})/$', views.item_detail),
]

在这些示例中:

  • r'^articles/(?P<year>[0-9]{4})/$' 匹配一个四位数字的年份,并将其作为 year 参数传递给视图 article_year
  • r'^users/(?P<username>\w{1,30})/$' 匹配一个长度为 1 到 30 的字母数字用户名,并将其作为 username 参数传递给视图 user_profile
  • r'^files/(?P<file_path>.+)/$' 匹配一个包含任意字符的文件路径,并将其作为 file_path 参数传递给视图 file_detail
  • r'^items/(?P<item_id>[0-9a-fA-F-]{36})/$' 匹配一个 UUID,并将其作为 item_id 参数传递给视图 item_detail

正则表达式语法

  • ^ 表示字符串的开始。
  • $ 表示字符串的结束。
  • . 匹配任意单个字符。
  • + 表示前面的字符或表达式至少出现一次。
  • {n} 表示前面的字符或表达式出现恰好 n 次。
  • \d 匹配任意数字字符,相当于 [0-9]
  • \w 匹配任意字母数字字符,相当于 [a-zA-Z0-9_]
  • (?P<name>pattern) 用于捕获匹配的内容并将其命名为 name,以便在视图函数中作为参数使用。

1.1.13路由嵌套匹配

使用 include 实现路由嵌套

假设你有一个主应用程序 main 和一个子应用程序 blog,你希望在 main 的 URL 配置中包含 blog 的 URL 配置。

主应用程序的 URL 配置 (main/urls.py)

首先,在主应用程序的 URL 配置文件中使用 include 函数包含子应用程序的 URL 配置:

from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
]
子应用程序的 URL 配置 (blog/urls.py)

在子应用程序中,定义自己的 URL 配置:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:post_id>/', views.detail, name='detail'),
    path('archive/', views.archive, name='archive'),
]

在这个示例中:

  • 访问 http://yourdomain.com/blog/ 会调用 blog 应用的 index 视图。
  • 访问 http://yourdomain.com/blog/1/ 会调用 blog 应用的 detail 视图,并将 post_id 参数传递给视图。
  • 访问 http://yourdomain.com/blog/archive/ 会调用 blog 应用的 archive 视图。

嵌套更深层级的路由

你可以继续嵌套更深层级的路由。例如,如果 blog 应用有一个 comments 子应用:

子应用程序的 URL 配置 (comments/urls.py)
from django.urls import path
from . import views

urlpatterns = [
    path('', views.comment_list, name='comment_list'),
    path('<int:comment_id>/', views.comment_detail, name='comment_detail'),
]
修改 blog 应用的 URL 配置以包含 comments 子应用 (blog/urls.py)
from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:post_id>/', views.detail, name='detail'),
    path('archive/', views.archive, name='archive'),
    path('comments/', include('comments.urls')),
]

在这个示例中:

  • 访问 http://yourdomain.com/blog/comments/ 会调用 comments 应用的 comment_list 视图。
  • 访问 http://yourdomain.com/blog/comments/1/ 会调用 comments 应用的 comment_detail 视图,并将 comment_id 参数传递给视图。
  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值