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实现哈希表
Feb 07 Python
2款Python内存检测工具介绍和使用方法
Jun 01 Python
Python中条件判断语句的简单使用方法
Aug 21 Python
python自动发送邮件脚本
Jun 20 Python
python实现公司年会抽奖程序
Jan 22 Python
python GUI实现小球满屏乱跑效果
May 09 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
python实现画图工具
Aug 27 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
python如何查找列表中元素的位置
May 30 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
如何过滤高亮显示非法字符
2006/10/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
d3.js实现图形拖拽
2019/12/19 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
jupyter安装小结
2016/03/13 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
python数值基础知识浅析
2019/11/19 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
店长职务说明书
2014/02/04 职场文书
双拥工作宣传标语
2014/06/26 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏