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

15811111111 修" /> 使用url_for()时,会自动调用转换器的to_url()方法 - 安迪9468 </span> <span class="icon-clock-1"> 2024-09-27 09:33:56 </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/6pdDk1nX5w/">浅谈service、DAO层引入(转)</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">转自 http://www.4u4v.net/mvc-simple-enough-on-the-introduction-of-service-dao-layer.html MVC是web开发中常见的 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/QV5Zalp7Jy/">Python3之错误处理</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及错误的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/gVdnn4RadW/">OC入门笔记</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1OC概述OC主要负责UI界面:C语言和C++可以用于图形处理.OC是一门面向对象的语言.C语言是面向过程的.比C++简单很多以C语言为基础,完全兼容C语言.OC语言中的所有事物都是对象,都有isa指 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/Vx5MZXL9dN/">gcc 与g++的区别</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">原文 http://www.cnblogs.com/wb118115/p/5969775.html 什么是gcc / g++ 首先说明:gcc 和 GCC 是两个不同的东西 GCC:GNU Compi ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/1O5EjB9Gd7/">单线程与多线程的应用 --Python3</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1.单线程应用 from time import ctime, sleep from time import ctime, sleep class ThreadClass: def say(self) ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/Vx5MZXQadN/">99%的人都理解错了GET与POST的区别</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">原文链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/rV57Wp0j5P/">Servlet 响应及请求信息</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">// 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestServletRequestrResponse.java package co ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/MyJx7PVEzn/">python学习-19 字典</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">字典dict 1.dic = {key:value,key:value} 字典有{ }括住,字典的value可以是任意值,字典的key的值不包括列表和字典 di = {"age": ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/Vx5MZv6GdN/">redis源码解读--内存分配zmalloc</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">目录 主要函数 void *zmalloc(size_t size) void *zcalloc(size_t size) void zrealloc(void ptr, size_t size) v ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/gGdXvbl1J4/">C++ 中不能声明为虚函数的函数有哪些?</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">目录 普通函数 构造函数 内联成员函数 静态成员函数 友元函数 普通函数 普通函数(非成员函数)只能被overload,不能被override,而且编译器会在编译时绑定函数. 多态的运行期行为体现在虚 ...</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/blueimp-md5-%e5%90%8e%e5%8f%b0%e8%a7%a3%e5%af%86/" title="blueimp-md5 后台解密">blueimp-md5 后台解密</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%a6%82%e4%bd%95%e5%9c%a8eliciple%e4%b8%ad%e6%8a%8a%e5%ad%97%e4%bd%93%e5%8f%98%e5%a4%a7/" title="如何在eliciple中把字体变大">如何在eliciple中把字体变大</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/findoneandupdate-%e6%8f%92%e5%85%a5%e5%a4%9a%e6%9d%a1%e4%b8%80%e6%a0%b7%e7%9a%84%e6%95%b0%e6%8d%ae/" title="findOneAndUpdate 插入多条一样的数据">findOneAndUpdate 插入多条一样的数据</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/svn-patch%e7%9b%b4%e6%8e%a5%e6%8f%90%e4%ba%a4/" title="svn patch直接提交">svn patch直接提交</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/c-%e5%88%a9%e7%94%a8excel%e7%9b%b4%e6%8e%a5%e8%af%bb%e5%8f%96%e6%95%b0%e6%8d%ae%e5%88%b0datagridview/" title="c#利用Excel直接读取数据到DataGridView">c#利用Excel直接读取数据到DataGridView</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%89%8d%e7%bc%80%e6%a0%91%e5%92%8c%e5%9f%ba%e6%95%b0%e6%a0%91-%e5%8c%ba%e5%88%ab/" title="前缀树和基数树 区别">前缀树和基数树 区别</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/chkdsk-f%e6%97%a0%e8%af%86%e5%88%ab/" title="chkdsk /f无识别">chkdsk /f无识别</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/django-%e6%a8%a1%e6%9d%bf%e8%af%ad%e6%b3%95-javascript%e5%a4%b1%e6%95%88/" title="django 模板语法 javascript失效">django 模板语法 javascript失效</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/yaffs%e5%91%bd%e4%bb%a4c%e8%af%ad%e8%a8%80/" title="yaffs命令c语言">yaffs命令c语言</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/arcmap%e5%88%b6%e5%9b%be%e6%8c%89%e6%af%94%e4%be%8b%e5%b0%ba%e8%be%93%e5%87%ba%e8%a6%81%e7%b4%a0%e6%98%be%e7%a4%ba%e4%b8%8d%e5%85%a8/" title="arcmap制图按比例尺输出要素显示不全">arcmap制图按比例尺输出要素显示不全</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/java%e8%a7%86%e9%a2%91%e5%b8%a7%e6%95%b0%e8%b0%83%e8%8a%82/" title="java视频帧数调节">java视频帧数调节</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%be%ae%e4%bf%a1%e6%99%ba%e6%85%a7%e8%81%8c%e6%95%99mooc%e5%88%b7%e8%a7%86%e9%a2%91/" title="微信智慧职教mooc刷视频">微信智慧职教mooc刷视频</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/matlab%e5%93%aa%e4%b8%aa%e7%89%88%e6%9c%acgui%e6%9b%b4%e6%94%b9/" title="MATLAB哪个版本gui更改">MATLAB哪个版本gui更改</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/jquery-json%e5%88%ab%e7%9a%84%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8/" title="jquery json别的函数使用">jquery json别的函数使用</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/python-%e8%8e%b7%e5%8f%96%e6%95%b0%e6%8d%ae%e5%ba%93%e8%87%aa%e5%a2%9eid/" title="python 获取数据库自增id">python 获取数据库自增id</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f-%e6%8a%a2%e8%b4%ad%e5%80%92%e8%ae%a1%e6%97%b6/" title="微信小程序 抢购倒计时">微信小程序 抢购倒计时</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/hbase-rowkey%e5%af%b9%e5%ba%94%e6%af%8f%e4%b8%80%e6%9d%a1%e8%ae%b0%e5%bd%95%e5%90%97/" title="hbase rowKey对应每一条记录吗">hbase rowKey对应每一条记录吗</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/npoi-excel-%e6%95%b0%e7%bb%84%e5%87%bd%e6%95%b0/" title="NPOI excel 数组函数">NPOI excel 数组函数</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1%e8%bf%87%e6%9c%9f%e4%ba%a4%e7%bb%99%e5%a4%a7%e6%95%b0%e6%8d%ae%e5%81%9a/" title="定时任务过期交给大数据做">定时任务过期交给大数据做</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/npio%e6%93%8d%e4%bd%9cexcel%e6%9b%b2%e7%ba%bf/" title="NPIO操作excel曲线">NPIO操作excel曲线</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>