路由层之路由匹配

"""路由你可以看成就是出去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})

Django学习——路由层之路由匹配、无名分组、有名分组、反向解析的更多相关文章

  1. python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

    12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...

  2. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  3. Django 学习第二天——URL路由及模板渲染方式

    URL 的概念及格式: URL的引入:客户端:知道了url 就可以去进行访问: 服务端:设置好了url,别人才能访问到我 URL :网址(全球统一资源定位符):由 协议,域名(ip port) ,路径 ...

  4. django学习(二)

    1.反向解析 什么是方向解析呢? 通过一些方法得到一个结果,该结果可以直接访问对应url出发视图函数. 先给一个路由和视图函数起一个别名.但是我们要注意的是反向解析的别名是不可以冲突的!!!不然会出现 ...

  5. [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]

    [Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...

  6. Django 学习 之路由层(URL)

    路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...

  7. Django( 学习第三部 Django的url路由层)

    目录 url路由层 路由匹配(有名分组与无名分组) 反向解析 路由分发 名称空间(了解) Django版本区别 url 路由匹配 注意事项: url方法,第一个参数是正则表达式,只要第一个参数能够匹配 ...

  8. django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间

    目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...

  9. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)

    摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...

随机推荐

  1. kafka如何保证不重复消费又不丢失数据_Kafka写入的数据如何保证不丢失?

    我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了 Kafka 的核心架构原理. Kafka 分布式存储架构 那么现在问题来了,如果每天产生几十 TB 的数据,难道都写一台机器的磁盘上吗?这 ...

  2. 如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?

    任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决. Java 序列化相关的常 ...

  3. phpstorm+xdebug调试详细教程

    对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了.不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作.这些都是死的,好说.但是对于Xdebug ...

  4. 什么是CopyOnWriteArrayList,它与ArrayList有何不同?

    CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add.set等等)都是通过对底层数组进行一次新的复制来实现的.相比较于ArrayList它的写操作 ...

  5. JavaScript的访问器

    一.访问器属性: 1.Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性.对于直接在对象上定义的属性,这个特性的默认值为tr ...

  6. 学习heartbeat-03t实现web服务的高可用案例及维护要点

    8.Heartbeat实现web服务的高可用案例 8.1部署准备 通过web服务高可用案例来熟悉heatbeat软件的使用,用上面的两台服务器机器名分别为heartbeat-1-130和heartbe ...

  7. Contos 安装nodeJs环境

    1.去nodeJs官网选择版本: https://nodejs.org/en/download/ 选择64位,右键复制链接地址 https://nodejs.org/dist/v8.12.0/node ...

  8. Leetcode1——两数之和 详细解析

    Leetcode1--两数之和 题目分类:数组.哈希表的应用 1. 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数 ...

  9. 2. 使用Github

    2. 使用Github 2.1 目的 借助github托管项目代码 2.2 基本概念 仓库(Repository) 仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库 收藏(Star ...

  10. javascript 判断变量是否是数组(Array)

    过完春节又有好多人寻找新的机会,旁边的人面试完就会分享一些问题,明明会的但是面试的时候,想不全,面试官不满意...这个懊恼的行为,今天的文章跟大家分享下:javascript如何判断便是是数组. 1. ...