如何深入理解Django框架中的第06个路由配置?

2026-06-11 10:531阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计999个文字,预计阅读时间需要4分钟。

如何深入理解Django框架中的第06个路由配置?

一:路径+简单的路径过程图:

1.路径的定义与位置:在urls.py文件中定义。

2.路径定义方式:使用url()函数从django.conf.urls模块导入。

3.主路径与子路径:主路径和子路径通过分隔符进行定义,如'app_name'。

示例代码:

pythonfrom django.conf.urls import urlfrom django.contrib import admin

urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^app_name/', include('app_name.urls')),]

一:路由

  简单的路由过程图:

  

  1. 路由的定义位置

  

  路由定义方式一:主路由和子路由分开定义

主路由的定义 urls.py from django.conf.urls import url from django.contrib import admin from django.conf.urls import include urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^user/‘, include(‘user.urls‘)) ] 子路由的定义 user/urls from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ url(r"^index/$", views.index), ]

  路由的定义方式二:不在user目录中手动urls.py,而是将所有的路由都定义在主路由中。

from django.conf.urls import url from django.contrib import admin import users.views urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^user/index/$‘, users.views.index) ]

二:路由的解析顺序

  Django接收一个请求时,从主文件的urls中的urlpatterns列表中从上至下顺序寻找路由,如果遇见include,进入里面继续寻找子路由。

  但是:因为由上至下,所以会造成上面的路由覆盖下面的路由,导致下面的路由访问不到,举例说明

from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): """ :return: """ return HttpResponse("中国,你好") def index_test(request): return HttpResponse("专门测试路由屏蔽,看是否能被访问到")

  修改user中的urls中的urlpatterns列表

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index/$", views.index), url(r"^index_test/$", views.index_test) # 测试是否被覆盖 ]

  访问 127.0.0.1:8000/user/index_test:路由没有被覆盖

  上下互换 index和index_test也不会被覆盖:原因是$,终止符

  假设去掉终止符$:看看情况如何

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index", views.index), url(r"^index_test", views.index_test), # url(r"^index/$", views.index), ]

  结果:再也不能执行到index_test的视图函数中去:去掉斜杠了和$,匹配到第一个index就停止了,直接进入index中去了。

如何深入理解Django框架中的第06个路由配置?

  但是不去掉斜杠,依然可以进入视图

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index/", views.index), url(r"^index_test/", views.index_test), # url(r"^index/$", views.index), ]

  结果:可以执行到index_test视图函数中去

  说明 / 有类似于$一样的终止的功能,到底是不是呢?

  解释:加斜杠的url(r"^index_test/", views.index_test),能保证路径的唯一性。

  用户访问 index_test 或者 index_test/ 网址,均能访问到index_test视图。

  即使你输入的网址是127.0.0.1:8000/user/index_test django框架还是将网址显示为:127.0.0.1:8000/user/index_test/

  

因此:必要的时候还是以$结尾,即使不以$结尾,也要以/结尾,以免发生路由覆盖的问题。

三:反向解析

  # 没搞懂

标签:理解

本文共计999个文字,预计阅读时间需要4分钟。

如何深入理解Django框架中的第06个路由配置?

一:路径+简单的路径过程图:

1.路径的定义与位置:在urls.py文件中定义。

2.路径定义方式:使用url()函数从django.conf.urls模块导入。

3.主路径与子路径:主路径和子路径通过分隔符进行定义,如'app_name'。

示例代码:

pythonfrom django.conf.urls import urlfrom django.contrib import admin

urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^app_name/', include('app_name.urls')),]

一:路由

  简单的路由过程图:

  

  1. 路由的定义位置

  

  路由定义方式一:主路由和子路由分开定义

主路由的定义 urls.py from django.conf.urls import url from django.contrib import admin from django.conf.urls import include urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^user/‘, include(‘user.urls‘)) ] 子路由的定义 user/urls from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ url(r"^index/$", views.index), ]

  路由的定义方式二:不在user目录中手动urls.py,而是将所有的路由都定义在主路由中。

from django.conf.urls import url from django.contrib import admin import users.views urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^user/index/$‘, users.views.index) ]

二:路由的解析顺序

  Django接收一个请求时,从主文件的urls中的urlpatterns列表中从上至下顺序寻找路由,如果遇见include,进入里面继续寻找子路由。

  但是:因为由上至下,所以会造成上面的路由覆盖下面的路由,导致下面的路由访问不到,举例说明

from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): """ :return: """ return HttpResponse("中国,你好") def index_test(request): return HttpResponse("专门测试路由屏蔽,看是否能被访问到")

  修改user中的urls中的urlpatterns列表

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index/$", views.index), url(r"^index_test/$", views.index_test) # 测试是否被覆盖 ]

  访问 127.0.0.1:8000/user/index_test:路由没有被覆盖

  上下互换 index和index_test也不会被覆盖:原因是$,终止符

  假设去掉终止符$:看看情况如何

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index", views.index), url(r"^index_test", views.index_test), # url(r"^index/$", views.index), ]

  结果:再也不能执行到index_test的视图函数中去:去掉斜杠了和$,匹配到第一个index就停止了,直接进入index中去了。

如何深入理解Django框架中的第06个路由配置?

  但是不去掉斜杠,依然可以进入视图

from django.conf.urls import url from . import views # 导入对应的视图函数名字,以后视图函数会越来越多。 urlpatterns = [ # url函数接收正则,和视图函数的引用。127.0.0.1:8000/index就能访问视图函数index的返回值hello django url(r"^index/", views.index), url(r"^index_test/", views.index_test), # url(r"^index/$", views.index), ]

  结果:可以执行到index_test视图函数中去

  说明 / 有类似于$一样的终止的功能,到底是不是呢?

  解释:加斜杠的url(r"^index_test/", views.index_test),能保证路径的唯一性。

  用户访问 index_test 或者 index_test/ 网址,均能访问到index_test视图。

  即使你输入的网址是127.0.0.1:8000/user/index_test django框架还是将网址显示为:127.0.0.1:8000/user/index_test/

  

因此:必要的时候还是以$结尾,即使不以$结尾,也要以/结尾,以免发生路由覆盖的问题。

三:反向解析

  # 没搞懂

标签:理解