静态路由和动态路由
1.静态路由
Django的路由不考虑HTTP请求方式,仅根据URL进行路由;即,只要URL相同,无论POST、GET等哪种请求方式都指向同一个操作函数
path方法
# 路由 路由对应的类视图
path('register/', views.RegisterView.as_view()),
re_path方法
# 使用正则表达式匹配路由的地址,与路由对应的视图函数
re_path(r"^",views.index),
2.动态路由
1.动态路由转换器
path('<int:x>/<str:y>/',views.index), # 指明类型
path("<x>/<y>/",views.index), # 不指明类型
re_path(r"^(?P<x>\d+)/(?P<y>[a-zA-Z]+)/$"),
# (?P<name>pattern) 正则分组
re_path(r"^(\d+)/([a-zA-Z]+)/$"),
路由通过尖括号进行分组匹配,使用**int**以及**str**内置转换器将连接对应部分的值进行转换;并将匹配到的结果传递到视图函数对应的参数位置上;
2.动态路由参数传递
def index(request,x,y):
content = "x:%s\ny:%s" % (x,y)
return HttpResponse(content)
# 定义如上函数,将会接收连接中的后两部份`path`值作为参数,分别依次给到`x`和`y`
str:匹配除了路径分隔符(`/`)之外的非空字符串,这是默认的形式
int:匹配正整数,包含0
- 动态路由传参,参数需要参与路由匹配,在路由匹配中获取参数
- GET参数,参数部分不需要参与路由匹配,在视图中获取参数
3.路由分发
在子应用内新建urls文件用于存放自己的路由
from django.urls import path,re_path
from myapp import views
# 子路由
urlpatterns = [
path('register/', views.RegisterView.as_view()),
path('login/', views.LoginView.as_view()),
path('index/', views.IndexView.as_view()),
#动态路由
path('index2/<int:id>',views.IndexView2.as_view())
]
需要在主页面实现分发
from django.contrib import admin
from django.urls import path,include
# 需导入子应用的urls
from myapp import urls
# 主路由
urlpatterns = [
path('admin/', admin.site.urls),
# 使用include 实现路由分发,找到子app下的路由文件
path("",include(urls))
]