Django的路由定义
- 什么是路由?
指url与后端Django视图之间的一一映射关系 - 添加和匹配规则
1)urlpatterns列表从上到下进行匹配(路由寻址) 2)urlpatterns列表中条目一旦匹配成功,就会终止往下匹配 3)urlpatterns列表中条目匹配不成功,就会一直往下匹配 4)urlpatterns列表中如果包含了子路由会在找到子路由进行匹配,子路由找不到则会在主路由继续匹配 4)如果全部条目都匹配不成功,那么会抛出404异常(404页面) - path函数
1)用于定义路由条目 2)第一个参数为url路径参数(字符串),路径最前面不添加/,路径最后面需要添加/ 3)第二个参数为视图函数或者类视图,如果添加的视图函数,一定不要使用() 4)第三个参数: kwargs任意个关键字参数可以作为一个字典传递给目标视图函数 5)第四个参数:name 你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。 6)如果第二个参数为include,那么会继续进入到子路由中匹配,子路由的匹配规则与全局路由匹配规则一致 7)第一个参数可以使用类型转化器 - <类型转化器:参数名称> - 默认的类型转化器:int、str、slug、uuid - 参数名称,在调用视图时,会自动传递给视图函数,需要使用同名的参数接收
- 主路由定义如下:
from django.urls import path, include, re_path
from projects import views
urlpatterns = [
path('projects/<int:pk>/', views.get_projects),
re_path(r'(?P<username>\w{6,20})/count/$', ListUserCountView.as_view()),
path('', include('projects.urls')),
]
- 子路由定义
from django.urls import path
from . import views
urlpatterns = [
path('projects/<int:pk>/', views.ProjectsView.as_view()),
]
- re_path的用法
re_path其实作用和path相似,都是匹配url路径后找到对应的视图进行处理,但是re_path使用正则进行匹配,可以理解成path的增强版 ; 具体使用如:
re_path(r'(?P<email>^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$)/count/$', views.is_email_exist)
def is_email_exist(self, request, email):
print(email)
pass
|