路由层的大体概括
4.1.静态路由
4.1.1静态路由的匹配方式
4.2.动态路由
4.2.1 参数传递
4.2.2 路由转换
4.2.3 传参和get传参
4.3.路由分发(重点)
4.3.1概念
4.3.2Include的实现
4.1.1静态路由的匹配方式
urlpatterns属性:
概念:
是路由的全局变量,存放视图模版的映射
过程:
先定义from后路由匹配path或re_path
path方法
from django.urls import path # 定义path方法
from myapp import views
urlpatterns = [
path(‘myview/’,views.MyView),
# myview 一般为小写
]
re_path方法
from django.urls import path,re_path
from myapp import views
urlpatterns = [
re_path(r’^(?P\d+)/(?P[a-zA-Z]+)$', views.IndexView3.as_view()),
]
4.2动态路由
4.2.1-4.2.2动态路由的传参(转换器)
接收不同的值,来实现路由的动态变化
from django.urls import path,re_path
from myapp import views
法1
re_path('^[a-z]{5}/$', views.IndexView.as_view()),
# 动态的路由传参参与路由匹配
# get传参 不参与路由匹配
**法2 不知名类型**
# 带类型的path 不知名类型默认是字符串类型
path('index2/<int:id>/<str:name>', views.IndexView2.as_view()),
**法3 正则**
# 采用正则的动态路由
re_path(r'^(?P<x>\d+)/(?P<y>[a-zA-Z]+)$', views.IndexView3.as_view()),
法4 分组
# 以小括号来分组
# 当不指定位置的时候按照顺序来传参
# re_path(r'^(\d+)/([a-zA-Z]+)$',views.IndexView3.as_view())
**对应法2的view:**
class IndexView2(View):
def get(self,request,id,name):
return HttpResponse(f"匹配到的ID为{id}名字为{name}")
**对应法3的正则**
class IndexView3(View):
def get(self,request,x,y):
return HttpResponse(f"x的值为{x}y的值为{y}")
4.2.3动态路由和get路由传参的异同点
动态路由*:动态路由传参参与路由匹配
get路由*:不参与路由匹配
4.3路由的分发
4.3.1分发的概念
概念:
每个子项目都有自己所独立的urls.py路由
主路由需要导入include函数的子函数下的路由文件
4.3.2路由分发的实现
主路由
from django.contrib import admin
from django.urls import path,include
from myapp import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls))
]
子路由:
from django.urls import path,re_path
from myapp import views
urlpatterns = [
path('reg/', views.RegView.as_view()),
path('login/', views.LoginView.as_view()),
path('index/', views.IndexView.as_view()),
]