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内置函数Type()函数一个有趣的用法
Feb 18 Python
Python调用命令行进度条的方法
May 05 Python
Python进阶之尾递归的用法实例
Jan 31 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
Python比较配置文件的方法实例详解
Jun 06 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
python 循环数据赋值实例
Dec 02 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
django使用graphql的实例
Sep 02 Python
numba提升python运行速度的实例方法
Jan 25 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限制ip地址范围的方法
2015/03/31 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Python装饰器简单用法实例小结
2018/12/03 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
Python调用JavaScript代码的方法
2020/10/27 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
什么是事务?为什么需要事务?
2012/01/09 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
铁路安全事故反思
2014/04/26 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
会计专业求职信范文
2015/03/19 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers