Django的URL分发
URL:统一资源定位符,是互联网资源的网络地址,简称网址,在互联网中,每一个文件都有着唯一的地址。
一般格式为协议://域名:端口号/路径/文件名 . 每当在浏览器的网址栏中输入网址时,浏览器就会使用这个地址,进行寻找,并把地址中包含的信息返回到客户端 。 但因为URL所指向的就是网络资源,会直接暴露的真实的资源位置,增减了危险因素。
????在Django中,提供了非常灵活的URL分发机制,允许用户使用任意格式的URL“路径/文件名“部分。 Django的URL与文件的实际位置无关,格式灵活。 因为一些Django项目拥有多个页面,这样就会导致urls文件的”笨重“,为了解决这个问题,Django有着 非常便利的URL分发技术。
Django的URL分发原理
在任何一个Django项目中,都有着一个根目录,其中就包含着Django项目的基本配置,其中就包括着URL的指向 在setting.py 文件中,ROOT_URLCONF 参数就代表着Django项目的根URL配置模块,负责着整个项目的URL解析。 默认ROOT_URLCONF = '项目名.urls' 在urls.py文件中,又有urlpatterns 的参数,其中就包含着URL模式列表,Django会 按照顺序进行匹配,直到匹配到对应的URL,接着Django就会调用匹配到的URL所映射的视图函数,将函数返回值呈现给前端。 若在URL列表中并没有匹配成功或者位置有问题,Django就会自动调用错误处理视图。 Django在执行URL分发操作时,首先加载的是根URL配置模块,不会直接访问应用的urls.py文件,所以在实际项目中,在根urls.py文件中需要加载应用的urls.py文件, 一般会使用include()函数 将应用的urls.py文件加载到根urls.py文件中。
值得注意的是,在使用指令创建一个应用时,Django并不会自动的创建一个urls文件,需要手动创建。 根urls文件
from django.urls. import path, include
...
urlpatterns = [
path('root/', include(应用.urls)),
...
]
应用urls文件
from django.urls. import path
...
urlpatterns = [
path('index/', 视图函数),
...
]
首先会在根urls文件下查找对应URL,当匹配到”root/“就会通过include() 将匹配条件发送到应用urls文件中继续匹配 ”index/“
URL的反向解析
反向解析URL指通过URL模式的名称或视图函数名称,来获得视图函数的URL。
django.urls.reverse() 函数用于获取反向解析URL。
在视图文件中设计一个index() 函数,用来反向解析URL,urls文件中使用reverse() 函数进行反向解析URL。 views文件
from django.urls import reverse
def index(request):
return HttpResponse("请求的URL路径为:%s" % reverse("urlNoPara"))
urls文件
from django.urls import path
...
urlpatterns = [
...
path('index/', itemPoolView.index, name="urlNoPara"),
]
则访问index/时,就会对应到index视图函数,并返URL。
Django的URL分发机制将用户访问的URL与实现输出页面的视图函数、模板、模型等隔离, 也在一定程度上保障了站点安全。
|