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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
如何将python中的List转化成dictionary
Aug 15 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Sanic框架应用部署方法详解
Jul 18 Python
浅析python继承与多重继承
Sep 13 Python
Python控制Firefox方法总结
Jun 03 Python
python设置环境变量的作用和实例
Jul 09 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
python爬虫爬取图片的简单代码
Jan 18 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
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
jquery 选择器部分整理
2009/10/28 Javascript
javascript数组去掉重复
2011/05/12 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
python 正则式使用心得
2009/05/07 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
消防安全承诺书
2014/05/22 职场文书
门市房租房协议书
2014/12/04 职场文书
解析MySQL binlog
2021/06/11 MySQL
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python