AI智能
改变未来

Django框架路由分发-名称空间

[toc]

一:路由分发

1.路由分发简介

1.django是专注于开发应用的,当一个django项目特别庞大的时候,所有的路由与视图函数映射关系全部写在项目名下urls.py(总路由层),很明显太冗余也不便于管理,这个时候也可以利用路由分发来减轻总路由的压力。2.django的每一个应用(app)都可以有自己独立的urls.py路由器,static文件夹,templates文件夹。3.基于上述特点,使用django做分组开发非常的简便。每个人只需要写自己的应用即可,互不干扰。最后由组长统一汇总到一个空的django项目中然后使用路由分发将多个应用关联在一起,即可完成大项目的拼接。

  • 路由分发解决的就是项目的总路由匹配关系过多的情况

  • 利用路由分发之后 总路由不再干路由与视图函数的直接对应关系

  • 总路由而是做一个分发处理(识别当前url是属于那个应用下的 直接分发对应的应用去处理)

  • 请求来了之后 总路由不做对应关系 只询问你要访问哪个app的功能 然后将请求转发给对应的app去处理

  • 提前创建好 应用app01 应用app02 然后记得注册

2.总路由分发配置

# 1.需要导入一个include路由分发模块from django.conf.urls import url,include# 2.导入子路由的uls(重名问题 起别名)from app01 import urls as app01_urlsfrom app02 import urls as app02_urlsurlpatterns = [url(r\'^admin/\', admin.site.urls),# 1.路由分发url(r\'^app01/\',include(app01_urls)),  # 只要url前缀是app01开头 全部交给app01处理url(r\'^app02/\',include(app02_urls))   # 只要url前缀是app02开头 全部交给app02处理]

3.总路由终极配置(不需要导应用路由,直接点应用即可)

  • 不需要导应用路由,直接点应用即可
# 1.需要导入一个include路由分发模块from django.conf.urls import url,include# 总路由分发 简便(推荐)urlpatterns = [# 路由分发终极写法 简便url(r\'^app01/\', include(\'app01.urls\')),url(r\'^app02/\', include(\'app02.urls\')),]

4.子路由配置

# 子路由# app01 urls.pyfrom django.conf.urls import urlfrom app01 import viewsurlpatterns = [url(r\'^reg/\',views.reg)]# app02 urls.pyfrom django.conf.urls import urlfrom app02 import viewsurlpatterns = [url(r\'^reg/\',views.reg)]

二:名称空间

1.名称空间应用场景

当多个应用出现了相同的别名 我们研究反向解析会不会自动识别应用前缀反向解析:正常情况下的反向解析是没有办法自动识别前缀的

2.解决 方式一>>>:名称空间

# 1.总路由增加一个名称空间url(r\'^app01/\',include(\'app01.urls\',namespace=\'app01\')), # 创建名称空间app01url(r\'^app02/\',include(\'app02.urls\',namespace=\'app02\'))  # 创建名称空间app02
# 2.子路由app01urlpatterns = [url(r\'^reg/\',views.reg,name=\'reg\')]# 后端def reg(request):print(reverse(\'app01:reg\'))return HttpResponse(\'app01: reg\')# 前端{% url \'app01:reg\' %}
# 3.子路由app02urlpatterns = [url(r\'^reg/\',views.reg,name=\'reg\')]# 后端def reg(request):print(reverse(\'app02:reg\'))return HttpResponse(\'app02: reg\')# 前端{% url \'app02:reg\' %}

3.解决方式二>>>:别名不能冲突(加上自己应用名作为前缀)

1.其实只要保证名字不冲突 就没有必要使用名称空间2.解决方法一般情况下 有多个app的时候我们在起别名的时候会加上app的前缀这样的话就能够确保多个app之间名字不冲突的问题
# 1.子路由# app01urlpatterns = [url(r\'^reg/\',views.reg,name=\'app01_reg\')]# app02urlpatterns = [url(r\'^reg/\',views.reg,name=\'app02_reg\')]
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Django框架路由分发-名称空间