Django之路由层

Django之路由层

 

路由匹配

  url方法第一个参数是正则表达式

    只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配,直接执行对应的试图函数

  / 的作用

Django之路由层

 Django之路由层

   ^ 的作用

Django之路由层

Django之路由层

   $ 的作用

  $ 可以精确到具体匹配那个字符

Django之路由层

   首页

Django之路由层

Django之路由层

 Django之路由层

   浏览器页面不加 / 也能匹配到内容

Django之路由层

Django之路由层

Django之路由层

无名分组与有名分组

  无名分组

  分组就是给某一段正则表达式用小括号括起来

  无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数

Django之路由层

 Django之路由层

Django之路由层

 Django之路由层

   有名分组

  就是给正则表达是起一个别名

  有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数

Django之路由层

 Django之路由层

Django之路由层

 Django之路由层

   注意事项

  1、无名分组和有名分组不能混用

  2、单个的分组可以使用多次(无名和有名分组都可以)

Django之路由层

反向解析

  通过一些方法得到一个结果,该结果可以直接访问对应的url触发对应的试图函数

  最简单的情况

  url第一个参数里面没有正则符号

    1、先给路由与试图函数起一个别名(目的是方便url里面的test1_1更改)

Django之路由层

    2、反向解析

      2.1、前端反向解析

        {% url 别名 %}

Django之路由层

 Django之路由层

     2.2、后端反向解析(reverse模块)

Django之路由层

 Django之路由层

   无名分组的反向解析

    urls文件

Django之路由层

     前端(1是自定义的)

Django之路由层

 Django之路由层

     后端(args=(1)中的1自定义的)

Django之路由层

   前后端反向解析中的数字定义

    数字一般情况下放的是数据的主键值,利用主键值来做数据的编辑和删除

  有名分组的反向解析

    urls文件

Django之路由层

     后端反向解析

    写法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')

Django之路由层

     前端反向解析

    写法1:

<a href="{% url 'ooo' year=1 %}">111</a>

    写法2:

<a href="{% url 'ooo' 1 %}">111</a>

Django之路由层

路由分发

  路由分发的应用场景

  1、Django的每一个应用都可以有自己的templates文件夹,urls.py、static文件夹,正是基于这个特点,Django能够非常好的做到分组开发(每个人只写自己的app),公司中组长只需要将下属写的app全部拷贝到一个新的Django项目中,然后在配置文里面注册所以的app再利用路由分发的特点将所以app整合起来

  2、当一个Django项目中url特别多的时候,总路由urls.py代码非常冗余不好维护,这个时候也可以利用路由分发来减轻总路由的压力

利用路由分发之后,总路由不再干路由与视图函数的直接对应关系,而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理

  路由分发的实现

Django之路由层

     app01urls文件

Django之路由层

    app02urls文件

Django之路由层

    总路由

    第一种写法

Django之路由层
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))
Django之路由层

Django之路由层

     第二种(推荐)

url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls'))

  注意:总路由里面的url后面不能加$结尾

Django之路由层

END

上一篇:Django(四)


下一篇:Django(8) 聚合查询/F查询/Q查询