python框架-django-06 路由的理解

1. 背景介绍

在 Python 的 Web 开发中,框架是事半功倍的利器之一。而 Django 做为红极一时的 Python Web 框架,具有开发迅速、功能强大等优良特性,因此备受开发者们的喜爱。

在 Django 的架构中,路由是一个十分重要的组成部分,它作为 Django 接受请求的一种方式,主要用于将 URL 请求转发到相应的视图函数,实现具体的业务逻辑。

2. 路由介绍

2.1 urlpatterns

Django 的路由系统是在 urls.py 文件中配置的,最常用的方法就是通过 urlpatterns 列表来配置路由。这个列表是在项目的 urls.py 文件中定义的。

样例如下:

from django.urls import path

from . import views

urlpatterns = [

path('articles//', views.year_archive),

path('articles///', views.month_archive),

path('articles////', views.article_detail),

]

从上面的代码中可以看出,urlpatterns 列表中每个元素都是一个 path() 函数调用,这个函数有两个参数:

第一个参数是 URL 规则,可以使用正则表达式。

第二个参数是对应视图函数。

其中,第二个参数 views.year_archive、views.month_archive 和 views.article_detail 就是对应的视图函数。

2.2 path()

path() 函数是 Django 中最常用的路由函数之一,它用于将一个 URL 规则与一个视图函数建立绑定关系。

path() 函数的基本语法格式如下:

path(route, view, kwargs=None, name=None)

参数说明:

route:字符串类型的 URL 规则。开头不需要加斜杆。

view:视图函数。当 route 中的规则匹配时,会调用此函数处理请求。

kwargs:一个字典类型参数,包含任意数目的关键字参数用于向视图传递额外的参数。

name:给 URL 起一个名字,以便在 Django 的其他部分中进行引用。

示例:

from django.urls import path

from . import views

urlpatterns = [

path('articles//', views.year_archive),

]

这个 URL 规则的含义是:以 articles/ 开头,后面跟着一个表示文章年份的整数(year),最后以斜杆(/)结尾。

2.3 re_path()

re_path() 函数与 path() 函数非常相似,但是它支持使用正则表达式进行 URL 规则匹配。

re_path() 函数的基本语法格式如下:

re_path(route, view, kwargs=None, name=None)

参数说明:

route:字符串类型的 URL 规则。必须使用正则表达式。

view:视图函数。当 route 中的规则匹配时,会调用此函数处理请求。

kwargs:一个字典类型参数,包含任意数目的关键字参数用于向视图传递额外的参数。

name:给 URL 起一个名字,以便在 Django 的其他部分中进行引用。

示例:

from django.urls import re_path

from . import views

urlpatterns = [

re_path(r'^articles/(?P<year>\d{4})/$', views.year_archive),

]

这个 URL 规则的含义是:以 articles/ 开头,后面跟着一个 4 位的整数(表示年份,使用 (?P<year>…) 捕获为 year 参数),最后以斜杆(/)结尾。

3. 路由命名

Django 路由系统中的每个 URL 都可以指定一个名字,它可让我们在代码的其它地方直接调用 URL 而不必硬编码(hard code)它。

定义 URL 命名的方式是给 path() 或 re_path() 函数的 name 参数传递一个字符串,例如:

from django.urls import path

from . import views

urlpatterns = [

path('articles//', views.year_archive, name='year_archive'),

]

这个 URL 命名为 “year_archive”。

要在代码中调用它,只需要使用 reverse() 函数,例如:

from django.urls import reverse

url = reverse('year_archive', args=(2021,))

其中,reverse 函数的第一个参数是 url 名称,args 参数是一个可迭代对象,它包含对应 url 中的参数。

4. include() 函数

include() 函数用于包含其它的 URL 配置模块。这个函数的作用是将子路由映射到项目的根路由,使得应用更加模块化。

示例:

from django.urls import include, path

urlpatterns = [

path('blog/', include('myblog.urls')),

]

这个例子把以 /blog/ 开头的请求都转到 myblog.urls 模块中进行处理。

5. 总结

本文主要介绍了 Django 路由的相关知识,包括 urlpatterns、path()、re_path()、路由命名及 include() 函数。

小心使用 urlpatterns 配置路由,与多个 urls.py 模块分离路由,内容清晰易维护。

后端开发标签