[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\')]