Django 路由


Django是基于Python的Web框架,其路由系统是其核心组件之一。在Django中,路由用于将请求映射到正确的处理函数上。

匹配路由规则 Django中的路由规则基于正则表达式匹配。可以在urls.py中定义路由规则,如:

from django.urls import path
from . import views

urlpatterns = [
    path('books/', views.list_all_books),
    path('books/<int:book_id>/', views.book_detail),
]

第一个路由规则会匹配所有以/books/开头的URL,并将请求交给views.list_all_books函数来处理。

第二个路由规则会匹配所有形如/books/1/这样的URL,并将请求交给views.book_detail函数来处理。其中,<int:book_id>使用了路由参数,表示将匹配一个整数类型的参数,将该参数传递给处理函数。

路由参数 Django支持通过路由参数将变量传递给处理函数。在urls.py中使用尖括号<>来表示参数,如:

from django.urls import path
from . import views

urlpatterns = [
    path('books/<int:book_id>/', views.book_detail),
    path('books/<str:author>/', views.list_books_by_author),
]

在这个例子中,第一个路由规则使用了路由参数<int:book_id>,表示将匹配一个整数类型的参数,并将该参数传递给views.book_detail函数。

第二个路由规则使用了路由参数<str:author>,表示将匹配一个字符串类型的参数,并将该参数传递给views.list_books_by_author函数。

正则表达式 路由规则使用正则表达式来进行模式匹配。在Django中,使用了一些预定义的正则表达式匹配模式,例如<int:var_name>表示匹配一个整数类型的变量;<str:var_name>表示匹配一个字符串类型的变量。如果需要匹配其他类型的变量,可以使用自定义的正则表达式模式来进行匹配。

例如,要匹配一个UUID类型的变量,可以在路由规则中定义正则表达式,如下所示:

from django.urls import path
from . import views

urlpatterns = [
    path('books/<uuid:book_id>/', views.book_detail),
]

在这个例子中,路由规则使用了自定义的正则表达式模式<uuid:book_id>,表示匹配一个UUID类型的变量,并将该变量传递给views.book_detail函数。

视图函数 Django中的路由规则不仅仅是将URL映射到处理函数上,同时也可以将请求处理函数分离成不同的视图函数。在处理函数中,可以使用路由参数来获取变量,并将变量传递给视图函数。

例如,在urls.py中定义的路由规则为path('books/<int:book_id>/', views.book_detail),将匹配所有形如/books/1/这样的URL,并将1传递给views.book_detail函数。在处理函数中,可以通过book_id变量名获取该参数,然后将book_id参数传递给视图函数。

总结 Django的路由系统是其核心组件之一,使用路由可以将请求映射到正确的处理函数上。路由系统基于正则表达式匹配,并支持路由参数、视图函数、自定义正则表达式模式等功能。掌握Django路由系统的使用可以更好地理解Django框架的工作原理,提高开发效率。