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框架的工作原理,提高开发效率。