路由是关联url及其处理函数关系的过程。
Django的url路由配置在setting.py文件中ROOT_URLCONF变量制定全局路由文件名称。
ROOT_URLCONF = 'haohaoread.urls'
Django的路由都写在urls.py文件中的urlpatterns的列表中,由path,re_path组成。
Django的URL路由流程如下:
- Django查找全局urlpatterns变量
- 按照先后顺序,对URL逐一匹配urlpatterns每个元素
- 找到第一个匹配时,停止查找,根据匹配结果执行对应的处理函数
- 如果没有找到匹配或出现异常,Django进行错误处理。
Django的路由不考虑Http请求方式,只要url相同,无论post、get等哪种请求方式都指向同一个操作函数。
Urlpatterns中的path()处理字符串路由,re_path处理正则表达式路由。
urlpatterns=[
path(route,views.函数名,向处理函数提供的额外参数,以字典形式表示,该URL模式的别名),
re_path(正则表达式,view.对应的处理函数)
]
举例如下:
urlpatterns = [
path('index/', views.Index),
path('login/', views.Login),
path('auth/',views.Auth),
path('getMenu/',views.Menu),
re_path(r'^userList/(\d*)',views.List)
]
include
当网站功能较多时,需要做模块化处理,通过django-admin startapp app名称,来生成对应的app目录,建一个urls.py文件。
from django.urls import include, path
urlpatterns = [
path('community/', include('community.urls')),
path('contact/', include('contact.urls')),
]
子目录contact下的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('contacts/', views.Contacts)
]
views.py
from django.shortcuts import render
from django.http import HttpResponse,HttpRequest
# Create your views here.
def Contacts(request):
return HttpResponse('<p>sdfsfsfs</p>')
这样,模块化处理路由的问题也就此解决。
网友评论