Django学习——路由层之路由匹配、无名分组、有名分组、反向解析
阅读原文时间:2022年04月29日阅读:1

路由层之路由匹配

"""路由你可以看成就是出去ip和port之后的地址"""
url()方法
    1.第一个参数其实是一个正则表达式
    2.一旦第一个参数匹配到了内容直接结束匹配 执行对应的视图函数
url(r'^test/$',views.test),

无名分组

url(r'^test/\d+/$',views.test),
# 正则表达式分组:给正则表达式前后加一个小括号
url(r'^test/(\d+)/$',views.test),
"""
无名分组
    将括号内正则表达式匹配到的内容当做位置参数传递给后面的视图函数
"""

有名分组

正则表达式可以起别名

 url(r'^testadd/(?P<id>\d+)/$',views.testadd),
"""
有名分组
    将括号内正则表达式匹配到的内容当做关键字参数传递给后面的视图函数
"""

是否可以结合使用

url(r'^test1/(\d+)/(?P<id>\d+)/$',views.test1),
1.无名有名分组不能混合使用

url(r'^test2/(\d+)/(\d+)/$',views.test2),
url(r'^test3/(?P<id>\d+)/(?P<id1>\d+)/$',views.test3),
2.可以单个重复使用

反向解析

当路由频繁变化的时候,HTML界面上的链接地址如何做到动态解析
# 1.给路由与视图函数对应关系添加一个别名(名字自己指定 只有不冲突即可)
url(r'^index/', views.index,name='index_name'),
# 2.根据该别名动态解析出一个结果,该结果可以直接访问到对应的路由
    前端
        <a href="{% url 'index_name' %}">111</a>
    后端
        from django.shortcuts import reverse
        reverse('index_name')
    ps:redirect括号内也可以直接写别名

无名有名反向解析

url(r'^index/(\d+)/', views.index,name='index_name'),
后端
    reverse('index_name',args=(1,)) # args一般放数据的主键值 只要给个数字即可
前端
    <a href="{% url 'index_name' 1 %}">111</a>  # 只要给个数字即可

url(r'^index/(?P<id>\d+)/', views.index,name='index_name'),
后端
    reverse('index_name',kwargs={'id':123}) # 只要给个数字即可
前端
    <a href="{% url 'index_name' id=666 %}">4444</a>  # 只要给个数字即可

总结
    无名有名都可以使用一种(无名)反向解析的形式

内容回顾

  • 数据库同步命令

    inspectdb

  • Django请求生命周期流程图

    1.web服务网关接口

    wsgiref

    uwsgi

    2.灰色地带(Django中间件)

    3.路由层

    4.视图层

    5.模板层

    6.模型层

  • 路由匹配

    1.自动补全斜杠

    APPEND_SLASH = True

    2.url()方法

    第一个参数是正则表达式

    # 路由匹配特性:一旦正则能够匹配到内容则停止继续往下而是直接执行对应的功能

  • 无名有名分组

    无名分组

    给正则表达式加上一个括号

    url(r'index/(\d+)/',views.index)

    执行视图函数的时候会将括号内匹配到的内容当做位置参数传递给视图函数

    有名分组

    给正则表达式加上一个括号并且起一个别名

    url(r'index/(?P\d+)/',views.index)

    执行视图函数的时候会将括号内匹配的内容当做关键字参数传递给视图函数

    ps:两者不能混合使用,但是单独可以重复使用

  • 反向解析

    """通过别名得到一个可以访问该别名对应的路由规则"""

    1.起别名(不能冲突)

    url(r'index/',views.index,name='index_name')

    2.反向解析

    前端

    {% url 'index_name' %}

    后端

    from django.shortcuts import reverse

    url = reverse('index_name')

  • 无名有名反向解析

    """当路由出现无名有名分组反向解析需要传递额外的参数"""

    url(r'index/(\d+)/',views.index,name='index_name')

    前端

    {% url 'index_name' 1 %}

    后端

    from django.shortcuts import reverse

    url = reverse('index_name',args=(1,))

    ps:有名分组的反向解析也可以使用无名的方式

    # 了解

    url(r'index/(?P\d+)/',views.index,name='index_name')

    前端

    {% url 'index_name' 1 %}

    后端

    from django.shortcuts import reverse

    url = reverse('index_name',kwargs={'id':1})