Django正则URL匹配实现流程解析


Posted in Python onNovember 13, 2020

一、引子

在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数。urls 中匹配 path("detail/",views.detail)

Django正则URL匹配实现流程解析

这样url 变成类似 http://127.0.0.1:8000/detail/?nid=2 今天我们来学习,类似http://127.0.0.1:8000/detail-3.html 这样的URL

据说,以前我们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面。可能在做搜索优化的时候有好处吧。

二、开搞栗子

忽略掉数据库,先在 views 新建一个用户字典

2.1 动态页面的栗子

views 代码:

info_dic={
  1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
  2:{"name":"lisi","email":"lisi@163.com","age":27},
  3:{"name":"wangwu","email":"wangwu@163.com","age":29},
  4:{"name":"laoliu","email":"laoliu@163.com","age":30},
  5:{"name":"chenpi","email":"chenpi@163.com","age":32},
}

def index(request):
  return render(request,"index.html",{"info_dic":info_dic})


def detail(request):
  nid=request.GET.get("nid")
  print(nid,type(nid))
  info=info_dic.get(int(nid))
  print(info)
  return render(request,"detail.html",{"info":info})

urls

Django正则URL匹配实现流程解析

前端,index.html,

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户信息</h1>

  <ul>
    {% for k,v in info_dic.items %}
      <li><a target="_blank" href="/detail/?nid={{ k }}" rel="external nofollow" >{{ v.name }}</a></li>
    {% endfor %}

  </ul>
</body>
</html>

前端,detail

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户详细信息</h1>

  <ul>
    <li>name:{{ info.name }}</li>
    <li>email:{{ info.email }}</li>
    <li>age:{{ info.age }}</li>
  </ul>
</body>
</html>

结果:

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

2.2 下面用 正则表达式来 搞URL 匹配,静态页面,

urls

Django正则URL匹配实现流程解析

views ,

直接在函数中传参数,nid 形式参数。不像之前需要自己到 reques.method 中去取

Django正则URL匹配实现流程解析

结果

Django正则URL匹配实现流程解析

上面的栗子中,我们得知参数是通过形参传递的,类似定义函数的形参数,

下面再搞一个栗子验证

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

参数位置变换后 ,获取的数值也变了

Django正则URL匹配实现流程解析

三、分组传参

在上面的栗子中,我们知道如果不分组,那么参数就是类似函数的位置参数,靠天吃饭,

很显然,这样不方便我们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就需要分组

下面搞栗子,变换nid,uid 位置之后,打印的结果是一样的。

Django正则URL匹配实现流程解析

位置参数可以在 *arg 中获取,关键字参数可以在 **kwargs 中获取

Django正则URL匹配实现流程解析

四、总结

路由系统:URL

  • 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  • 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
  • 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python在线运行代码助手
Jul 15 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
Oct 15 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
大数据分析用java还是Python
Jul 06 Python
python实现xml转json文件的示例代码
Dec 30 Python
python实现自动化群控的步骤
Apr 11 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
Django框架请求生命周期实现原理
Nov 13 #Python
python在地图上画比例的实例详解
Nov 13 #Python
python语言实现贪吃蛇游戏
Nov 13 #Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 #Python
python切割图片的示例
Nov 12 #Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 #Python
Django执行源生mysql语句实现过程解析
Nov 12 #Python
You might like
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
教大家制作简单的php日历
2015/11/17 PHP
PHP.vs.JAVA
2016/04/29 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
JS原型链怎么理解
2016/06/27 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
javascript数据类型详解
2017/02/07 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
Python同步遍历多个列表的示例
2019/02/19 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
化工工艺专业求职信
2013/09/22 职场文书
授权委托书范文
2014/07/31 职场文书
英文感谢信范文
2015/01/21 职场文书
保洁员岗位职责
2015/02/04 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
让文件路径提取变得更简单的Python Path库
2021/05/27 Python