Django URL路由分发系统

Posted zc3614

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django URL路由分发系统相关的知识,希望对你有一定的参考价值。

Django  URL路由分发系统

URL匹配过程

在Django中,我们使用urls.py模块处理url的分发

例:http://127.0.0.1:8080/abindex?a=1

1)去除域名和端口以及 /,剩下 abindex?a=1

2)拿 abindex?a=1 先到项目的 url.py 去匹配,然后拿剩下的index再到应用下面的urls.py去匹配

3)如果匹配成功,则调用相应的视图函数产生的内容返回给客户端。匹配失败的话则返回404错误。

from django.conf.urls import url   #此处是项目下的urls.py
from blog import views

# url( path路径,views视图函数,反向解析)
urlpatterns = [
    url(radmin/, admin.site.urls),     #django后台admin
    url(r^ab/, include(blog.urls)),   #匹配到ab所指的blog应用下的urls.py再去匹配,此时用include函数指定位置
    url(rlogin1/,views.login,name=login)#若是从项目目录直接指向应用的views的话,在匹配 path路径 后,views视图函数直接写views.函数名  
                            name= 为反向解析(例路径 login1所指向的反向解析为 login所对应的视图函数为views.login,所以,login1可以更换为其他地址,方便后期更改url,而不用重新更改视图函数和模版变量里的url)
]

一般来说,一个项目不止一个应用,所以,我们需要将分类,将不同的url分配到不同的应用中再做匹配,然后再执行views视图函数

from django.conf.urls import url   #此处是项目下的urls.py
from blog import views

# url( path路径,views视图函数,反向解析)
urlpatterns = [
    url(radmin/, admin.site.urls),     #django后台admin
    url(r^bss/, include(blog.urls)),   #匹配到bss所指的bss应用下的urls.py再去匹配,此时用include函数指定位置
    url(r^web/, include(blog.urls)),   #匹配到web所指的web应用下的urls.py再去匹配,此时用include函数指定位置
    url(r^vedio/, include(blog.urls)),   #匹配到vedio所指的vedio应用下的vedio.py再去匹配,此时用include函数指定位置

]

 

URL参数捕获

现在,我们通过include把项目中的url定位到我们应用来了,此时我们再从应用中匹配执行视图函数,并捕获url后面的参数

例:http://127.0.0.1:8080/bss/login/abc/2019

 

from django.conf.urls import url   #此处是应用bss下的urls.py
from django.urls import path,re_path
from bss import views

urlpatterns = [
   path(r^login/<str:name>/<int:num>,views.login),              #此时先过项目的匹配,筛选掉了bss,然后剩余部分再匹配login ,剩下abc/2019,分别被name和num捕获到
   re_path(rlogin/(?P<name>w+)/(?P<years>[0-9]{4}), views.test),   # 通过函数re_path或者下面url函数 自定义固定参数捕获 name 和 num 参数,此方法叫关键字参数捕获
   url(rlogin/(?P<name>w+)/(?P<years>[0-9]{4}), views.test),     # 也可以通过函数url函数达到同样目的
   url(rlogin/(w+)/(d+), views.test),                   # 也可以通过函数url函数达到同样目的,此方法叫位置参数捕获
 ] 

 

关键字参数捕获到的name和num在views.py中应在函数定义的时候作为参数传入,且参数变量名必须保持一致。

而位置参数捕获,因为只是在匹配地址时位置分组,所以变量名可自定义,使用时按照位置给变量取名。

def login(request,name,num)
    pass

 

 

此时,url   path  re_path   三个函数可能会混淆

简单说   django 1.X 版本用url

    django 2.X 版本用path re_path

可查看: https://www.bbsmax.com/A/D8546ZRQzE/  做详细解说

 

以上是关于Django URL路由分发系统的主要内容,如果未能解决你的问题,请参考以下文章

Django-URL路由分发include

HTTP协议 django下载安装 url路由分发

二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

django的url分发封装

Django学习之十一:真正理解Django的路由分发和反解url原理

路由分发与名称空间