Django之路由层
Django之路由层
路由匹配
url方法第一个参数是正则表达式
只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配,直接执行对应的试图函数
/ 的作用
^ 的作用
$ 的作用
$ 可以精确到具体匹配那个字符
首页
浏览器页面不加 / 也能匹配到内容
无名分组与有名分组
无名分组
分组就是给某一段正则表达式用小括号括起来
无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数
有名分组
就是给正则表达是起一个别名
有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数
注意事项
1、无名分组和有名分组不能混用
2、单个的分组可以使用多次(无名和有名分组都可以)
反向解析
通过一些方法得到一个结果,该结果可以直接访问对应的url触发对应的试图函数
最简单的情况
url第一个参数里面没有正则符号
1、先给路由与试图函数起一个别名(目的是方便url里面的test1_1更改)
2、反向解析
2.1、前端反向解析
{% url 别名 %}
2.2、后端反向解析(reverse模块)
无名分组的反向解析
urls文件
前端(1是自定义的)
后端(args=(1)中的1自定义的)
前后端反向解析中的数字定义
数字一般情况下放的是数据的主键值,利用主键值来做数据的编辑和删除
有名分组的反向解析
urls文件
后端反向解析
写法1:
def home(request): print(reverse('ooo', kwargs={'year': 123})) return render(request, 'home.html')
写法2:
def home(request): print(reverse('ooo',args=(1,))) return render(request, 'home.html')
前端反向解析
写法1:
<a href="{% url 'ooo' year=1 %}">111</a>
写法2:
<a href="{% url 'ooo' 1 %}">111</a>
路由分发
路由分发的应用场景
1、Django的每一个应用都可以有自己的templates文件夹,urls.py、static文件夹,正是基于这个特点,Django能够非常好的做到分组开发(每个人只写自己的app),公司中组长只需要将下属写的app全部拷贝到一个新的Django项目中,然后在配置文里面注册所以的app再利用路由分发的特点将所以app整合起来
2、当一个Django项目中url特别多的时候,总路由urls.py代码非常冗余不好维护,这个时候也可以利用路由分发来减轻总路由的压力
利用路由分发之后,总路由不再干路由与视图函数的直接对应关系,而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理
路由分发的实现
app01urls文件
app02urls文件
总路由
第一种写法
from django.conf.urls import url, include from django.contrib import admin from app01 import urls as app01_urls from app02 import urls as app02_urls urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include(app01_urls)), url(r'^app02/', include(app02_urls))
第二种(推荐)
url(r'^app01/', include('app01.urls')), url(r'^app02/', include('app02.urls'))
注意:总路由里面的url后面不能加$结尾