使用url_for()时,会自动调用转换器的to_url()方法

15811111111 修" /> 使用url_for()时,会自动调用转换器的to_url()方法 - 安迪9468 </span> <span class="icon-clock-1"> 2024-07-22 12:17:23 </span> <span class="icon-article-1"> <a href="/link/RTM1cHJRQUV6dg==" target="_blank" rel="noindex,nofollow,oarchive">原文</a> </span> </div> <div class="post-content"> <div id="single_top"></div> <script>insertAdIfNeeded("single_top");</script> <p>视图反推url,在动态url(转换器)反推中的应用</p> <p><img referrerpolicy="no-referrer"src="https://img2018.cnblogs.com/blog/552284/201905/552284-20190515201911545-1005440740.png" /></p> <div> <pre class="prettyprint linenums"># -*- coding: utf-8 -*-<br /> from flask import Flask, url_for, redirect<br /> from werkzeug.routing import BaseConverter app = Flask(__name__) # 转换器<br /> # 127.0.0.1:5000/goods/123<br /> @app.route("/goods/<int:goods_id>")<br /> # @app.route("/goods/<goods_id>") # 不加转换器类型, 默认是普通字符串规则(除了/的字符)<br /> def goods_detail(goods_id):<br /> """定义的视图函数"""<br /> return "goods detail page %s" % goods_id # 1. 定义自己的转换器<br /> class MobileConverter(BaseConverter):<br /> def __init__(self, url_map):<br /> super(MobileConverter, self).__init__(url_map)<br /> self.regex = r'1[34578]\d{9}' class RegexConverter(BaseConverter):<br /> """""" def __init__(self, url_map, regex):<br /> # 调用父类的初始化方法<br /> super(RegexConverter, self).__init__(url_map)<br /> # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配<br /> self.regex = regex def to_python(self, value):<br /> """"""<br /> print("to_python方法被调用")<br /> # return "abc"<br /> # value是在路径进行正则表达式匹配的时候提取的参数<br /> return value def to_url(self, value):<br /> """使用url_for的方法的时候被调用"""<br /> print("to_url方法被调用")<br /> return "15811111111"<br /> # return value # 2. 将自定义的转换器添加到flask的应用中<br /> app.url_map.converters["re"] = RegexConverter<br /> app.url_map.converters["mobile"] = MobileConverter # 127.0.0.1:5000/send/18612345678<br /> # @app.route("/send/<mobile:mobile_num>")<br /> @app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>")<br /> def send_sms(mobile_num):<br /> return "send sms to %s" % mobile_num @app.route("/index")<br /> def index():<br /> url = url_for("send_sms", mobile_num="18922222222")<br /> # /send/18922222222<br /> return redirect(url) if __name__ == '__main__':<br /> # 通过url_map可以查看整个flask中的路由信息<br /> print(app.url_map)<br /> # 启动flask程序<br /> app.run(debug=True) </pre> </div> <p>  </p> <p>访问:<a href="http://127.0.0.1:5000/index" rel="external nofollow noreferrer">http://127.0.0.1:5000/index</a></p> <p>跳转:<a href="http://127.0.0.1:5000/send/15811111111" rel="external nofollow noreferrer">http://127.0.0.1:5000/send/15811111111</a></p> <p><img referrerpolicy="no-referrer"src="https://img2018.cnblogs.com/blog/552284/201905/552284-20190515202325701-1214262762.png" /></p> <p>修改to_url后</p> <p><img referrerpolicy="no-referrer"src="https://img2018.cnblogs.com/blog/552284/201905/552284-20190515202413868-213892806.png" /></p> <p><img referrerpolicy="no-referrer"src="https://img2018.cnblogs.com/blog/552284/201905/552284-20190515202442952-1172779095.png" /></p> <div id="single_bottom"></div> <script>insertAdIfNeeded("single_bottom");</script> <h2><a href="/R/E35prQAEzv/">使用url_for()时,会自动调用转换器的to_url()方法的更多相关文章</a></h2> <ol> <li><a href="https://www.shuzhiduo.com/A/8Bz8oN06dx/">thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/QV5ZqmyJyb/">EditText取消自动调用键盘事件(方法之一)</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">直接上代码,这只是其中一种方法: 重点在于是在该EditText的父空间中设置 <LinearLayout android:layout_width="match_parent&quo ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/amd08pDWdg/">jQuery在页面加载的时候自动调用某个函数的方法</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">第一种:$(document).ready(function(){ func(xxx)//执行函数}); 第二种:$(function(){ func(xxx)//执行函数}); 第三种:jQuery ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/Ae5RV1EL5Q/">vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">原文:http://www.jb51.net/article/129270.htm main.js入口文件配合vue-router写这个 router.afterEach((to,from,next) ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/x9J22V8NJ6/">CocoaPods中的头文件import导入时不能自动补齐的解决方法</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1.选择target(就是左边你的工程target)-->BuildSettings-->search Paths下的User Header Search Paths 2.添加“$(POD ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/n2d9XYeQ5D/">PHP中 对象自动调用的方法:__set()、__get()、__tostring()</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/qVdeOAWbJP/">C++中构造函数的手动和自动调用方式</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1,对象的构造通过构造函数来完成,和类名相同且没有返回值,这个时候只有参   数一个特性,构造函数可以自定义参数,这个参数一般而言就是对类进行初始  化来使用的:带有参数的构造函数的意义在于可以使得每 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/QV5ZnwP65y/">vue+element-ui, el-upload组件 文件上传之前return false,会自动调用文件移除回调问题</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">日常搬砖的时候,项目中在使用element-ui的上传组件,但是当我在文件上传文件之前的回调里面做了些文件格式的二次校验和文件大小的校验的时 然后 return false 会发现调用 文件移除的回调 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/B0zq2xwNJv/">原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.o ...</p> </li> </ol> <h2>随机推荐</h2> <ol> <li><a href="https://www.shuzhiduo.com/A/kjdwmxqrJN/">一百四十六:CMS系统之帖子按照发布时间和评论数量排序</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">按照不同选项进行排序 视图 @bp.route('/')def index(): board_id = request.args.get('board_id', type=int, default=N ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/A7zgG26Wz4/">OpenStack社区中的GO语言之争</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1 背景介绍 Swift之前几乎所有的代码都是用Python实现的,但是性能一直不理想, 社区为了解决性能问题,尝试过很多方法,后来发现用Golang语言进行一部分代码重写, 性能得到了一定的提升,社 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/pRdBxo61Jn/">Python的Asyncore异步Socket模块及实现端口转发的例子</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/x9J2E1VKz6/">MySQL性能优化最佳实践20条</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/l1dyom89Je/">iOS-UITextField和UITextView隐藏键盘</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">UITextField和UITextView隐藏键盘 71 views, IOS DEV, by admin. self._textField.returnKeyType=UIReturnKeyDon ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/D854Do7x5E/">Ocelot+Consul 集群搭建实践</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/kmzL217G5G/">charles 批量重复请求/重复发包工具</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">本文参考:charles 批量请求 重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/D854Dop25E/">100/200/400GE高速以太网:Autoneg & Link Training 自适应及链路学习相关姿势介绍</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">2019-10-31 08:29:22 先写个目录,陆续补齐 PAM4模式下50GE,100GE,200GE,400GE以太网为什么需要AN & LT功能?AN .Autoneg自适应功能介绍 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/gVdnn4rpdW/">OAuth 2.0 授权认证详解</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">一.认识 OAuth 2.0 1.1 OAuth 2.0 应用场景 OAuth 2.0 标准目前被广泛应用在第三方登录场景中,以下是虚拟出来的角色,阐述 OAuth2 能帮我们干什么,引用阮一峰这篇理 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/gVdnn47XdW/">基于MSP430G2系列实现的步进电机控制</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">基于MSP430G2系列实现的步进电机控制 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路 ...</p> </li> </ol> </div> <!--<div class="shareBox clearfix"> </div>--> <!--<div class="posts-cjtz content-cjtz clearfix"><img src="/images.grace/2865270162.png" alt="" /></div> --> <div class="next-prev-posts clearfix"> </div> </div> <div class="clear"></div> </div> <div class="widget"><h3><span>热门专题</span></h3> <div class="widge_tags"> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/sql%e7%a7%91%e5%ad%a6%e8%ae%a1%e6%95%b0%e6%b3%95%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ad%97%e7%ac%a6/" title="sql科学计数法转化为字符">sql科学计数法转化为字符</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/webconfig-%e8%ae%be%e7%bd%aesession%e8%b6%85%e6%97%b6/" title="webconfig 设置session超时">webconfig 设置session超时</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/combinebykey%e4%be%8b%e5%ad%90/" title="combineByKey例子">combineByKey例子</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/git-bash-%e8%bf%9c%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%9c%b0%e5%9d%80/" title="git bash 远程服务器地址">git bash 远程服务器地址</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/flutter-listview-%e7%bb%91%e5%ae%9a/" title="flutter listview 绑定">flutter listview 绑定</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e8%af%b7%e4%b8%be%e4%be%8b%e8%af%b4%e6%98%8e%e8%af%bb%e5%86%99%e4%b8%80%e6%ac%a1%e7%a3%81%e7%9b%98%e7%9a%84dma%e8%bf%87%e7%a8%8b/" title="请举例说明读写一次磁盘的DMA过程">请举例说明读写一次磁盘的DMA过程</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/chrome-html-%e8%87%aa%e5%8a%a8%e5%90%8e%e5%8f%b0%e6%92%ad%e6%94%bemp3/" title="chrome html 自动后台播放MP3">chrome html 自动后台播放MP3</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/css-transform-%e7%9b%b4%e8%a7%92%e5%8f%98%e5%9c%86%e8%a7%92/" title="css transform 直角变圆角">css transform 直角变圆角</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/qq%e9%9f%b3%e4%b9%90%e6%8e%a5%e5%8f%a3-%e6%97%a0%e6%8d%9f-%e6%8e%a5%e5%8f%a3/" title="qq音乐接口 无损 接口">qq音乐接口 无损 接口</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e6%8b%96%e6%8b%bd%e5%85%83%e7%b4%a0%e4%bd%8d%e7%bd%aedrag/" title="拖拽元素位置drag">拖拽元素位置drag</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/vs%e9%a1%b9%e7%9b%ae%e8%ae%be%e7%bd%ae%e4%b8%bautf8%e7%bc%96%e7%a0%81/" title="vs项目设置为UTF8编码">vs项目设置为UTF8编码</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/iview-table%e5%ad%97%e6%ae%b5%e4%b8%ba%e5%af%b9%e8%b1%a1/" title="iview table字段为对象">iview table字段为对象</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/golang-%e8%8e%b7%e5%8f%96-struct-size/" title="golang 获取 struct size">golang 获取 struct size</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/css%e5%8a%a8%e7%94%bb-%e5%b8%b8%e8%a7%81-%e4%bb%a3%e7%a0%81-transform/" title="css动画 常见 代码 transform">css动画 常见 代码 transform</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/python-requests%e5%ba%93%e5%87%bd%e6%95%b0%e5%a4%a7%e5%85%a8/" title="python requests库函数大全">python requests库函数大全</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/gedit-%e6%9c%89%e4%b8%80%e4%ba%9b%e8%bd%af%e4%bb%b6%e5%8c%85%e6%97%a0%e6%b3%95%e8%a2%ab%e5%ae%89%e8%a3%85/" title="gedit 有一些软件包无法被安装">gedit 有一些软件包无法被安装</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e4%ba%91mas%e5%b9%b3%e5%8f%b0%e6%80%8e%e4%b9%88%e5%8f%91%e9%80%81%e7%9f%ad%e4%bf%a1/" title="云mas平台怎么发送短信">云mas平台怎么发送短信</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/tabula-python%e5%ba%93/" title="tabula python库">tabula python库</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/linux%e5%ae%89%e8%a3%85virtualenv-20-23-0/" title="linux安装virtualenv 20.23.0">linux安装virtualenv 20.23.0</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/js%e8%b0%83%e5%87%ba%e6%89%93%e5%8d%b0%e9%a2%84%e8%a7%88%e9%a1%b5%e9%9d%a2/" title="js调出打印预览页面">js调出打印预览页面</a> </div> </div> </div> </div> </div> </div> <div class="clearfix"></div> <div id="footer" class="two-s-footer"> <div class="footer-box"> <div class="container"> <div class="row" style="padding-left: 15px;padding-right: 15px;"> <div class="nav-footer"> <a href="/">Home</a> </div> <div class="copyright-footer"> <p>Powered By WordPress</p> </div> </div> </div> </div> </div> <div style="display:none"> </div> <script src="https://n4.ikafan.com/assets/js/echo.js"></script> <script> echo.init({ offset: 100, throttle: 250, unload: false, callback: function (element, op) { console.log(element, 'has been', op + 'ed') } }); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f15ef43e2286a8db87bbc840d67d46b2"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>