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 不同对象比较大小示例探讨
Aug 21 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
python将回车作为输入内容的实例
Jun 23 Python
学生信息管理系统python版
Oct 17 Python
浅谈Python 参数与变量
Jun 20 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
Python的collections模块真的很好用
Mar 01 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 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 array数组的教程详解
2013/06/05 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
jquery实现动态添加附件功能
2018/10/23 jQuery
JS module的导出和导入的实现代码
2019/02/25 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
进一步了解Python中的XML 工具
2015/04/13 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
经济学人订阅:The Economist
2018/07/19 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
安全生产先进个人总结
2015/02/15 职场文书
搞笑结婚保证书
2015/05/08 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
python中tkinter复选框使用操作
2021/11/11 Python
详解TypeScript的基础类型
2022/02/18 Javascript
Python基本的内置数据类型及使用方法
2022/04/13 Python