1. 静态路由
1.1 静态路由匹配方式
urlpatterns属性
urlpatterns是路由文件中的一个全局变量,用来存放路由及视图函数的映射关系
用户发起的请求URL
都会首先进入主控制目录下的这个urls.py
文件中进行查找匹配
- 首先找到
urls.py
下的urlpatterns
全局变量,这是一个路由规则实例的列表数据。 - 按照先后定义顺序,进行路由匹配。
- 找到第一个匹配项时停止匹配,执行匹配到的视图函数。
- 遍历完全,未发现匹配,
django
进行异常处理
其中urlpatterns
中的每一个路由映射规则可以由path
或re_path
进行构造
注意:Django
的路由不考虑HTTP
请求方式,仅根据URL进行路由;即,只要URL
相同,无论POST
、GET
等哪种请求方式都指向同一个操作函数
1.2 path方法
path(str, view, kwargs=None, name=None)
re_path(regex, view, kwargs=None, name=None)
1.3 静态路由
静态路由用来映射对应视图函数,以下是一个简单的例子
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello Worlds!')
from django.urls import path,re_path
from urlapp import views
urlpatterns = [
path('',views.index),
re_path(r"^",views.index),
]
2.动态路由
2.1 动态路由参数传递
有的时候,我们的路由设置不能一直维持一个一成不变的状态;
比如遇到一些内容翻页的场景,那么我们的连接可能是:xx.com/airticle_list/1/
、`xx.com/airticle_list/2/
那么这样的路由其实对应的都应该是一个视图函数,用以展示页面内容
def index(request,x,y):
content = "x:%s\ny:%s" % (x,y)
return HttpResponse(content)
定义如上函数,将会接收连接中的后两部份path
值作为参数,分别依次给到x
和`y
2.2 动态路由转换器
from django.urls import path,re_path
from urlapp import views
urlpatterns = [
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内置转换器将连接对应部分的值进行转换;并将匹配到的结果传递到视图函数对应的参数位置上
- 其他内置Path转换器,可以将我们的路由参数规定为指定类型
'''
str:匹配除了路径分隔符(`/`)之外的非空字符串,这是默认的形式
int:匹配正整数,包含0
slug:匹配字母、数字以及横杠、下划线组成的字符串
uuid:匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
path:匹配任何非空字符串,包含了路径分隔符
'''
2.3路由分发实现
每个子app
都拥有自己独立的urls.py
路由映射文件,而主控路由文件里只需要使用include
函数导入子app
下路由文件即可,这就是路由分发
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include("urlapp.urls")) # 使用include 实现路由分发,找到子app下的路由文件
]
可以让我们在多个app
的项目中更加方便有效的管理每一个路由
3.总结
注意导入函数