使用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/mo5k4D13dw/">python 基础之确认文件是否存在</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">def check_exist_bills(): file_dir=os.listdir('../db') bills_db_list=[] for item in file_dir: if item ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/ZOJPDjnaJv/">LODOP中纸张高度不定超文本和纯文本对比</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">关于纸张高度不定的小票打印,建议使用纯文本进行设计,避免纸张高度引起变形,或超文本解析差异造成一些影响:LODOP纸张高度不定的纯文本累计高度 上面的链接的博文里,纯文本可通过间距和高度值累计,得出最 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/GBJrBWZaJ0/">python多进程——fork()</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">简介    程序每次执行时,操作系统都会创建一个新进程来运行程序指令.进程中可调用os.fork,要求操作系统新建一个子进程.[Windowsc系统中,os模块没有os.fork函数]. 每个进程都有 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/l1dyomEgJe/">Unity接入九游SDK学习与踩坑</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">学习之路漫漫,应修之期远兮.持之以恒,方得始终. 这几日接入九游SDK,于浑浑噩噩中成长. 下面是步骤: 一:下载九游SDK 二:打开Android Studio新建一个工程,并且新建一个Androi ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/kjdwm1N2JN/">使用JavaScript实现量化策略并发执行</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">本文代码和文章发在FMZ发明者比特币量化交易平台上: 使用JavaScript实现量化策略并发执行--封装Go函数 - 发明者量化 https://www.fmz.com/digest-topic/3 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/amd026KqJg/">经典PID控制及应用体会总结</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">经典PID控制及应用体会总结 PID控制原理 PID是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制方案: 重点关注相关算法是如何对偏差进行处理的: PID控制器各校正环节 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/MyJx7gEazn/">mysql配置优化的参数</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">1.MySQL数据库高效优化解析  Mysql优化是一项非常重要的工作,而且是一项长期的工作,曾经有一个为位DBA前辈说过:mysql的优化,三分配置的优化,七分sql语句的优化. Mysql的优化: ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/Ae5Rn2275Q/">CSS内联--与块级元素区别</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">内联元素:1.内联元素(inline)不会独占一行,相邻的内联元素会排在同一行.其宽度随内容的变化而变化. 2.内联元素不可以设置宽高 3.内联元素可以设置margin,padding,但只在水平方向 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/q4zVBDelzK/">python计算平面的法向-利用协方差矩阵求解特征值和特征向量</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">Obvious,最小特征值对应的特征向量为平面的法向 这个问题还有个关键是通过python求协方差矩阵的特征值和特征向量,np.linalg.eig()方法直接返回了特征值的向量和特征向量的矩阵 sc ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/kPzO4XMQJx/">[转帖]APP逆向神器之Frida【Android初级篇】</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">APP逆向神器之Frida[Android初级篇] https://juejin.im/post/5d25a543e51d455d6d5358ab 说到逆向APP,很多人首先想到的都是反编译,但是单看 ...</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/linux-java-%e8%b0%83%e7%94%a8conda/" title="linux java 调用conda">linux java 调用conda</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/phpstorm%e9%85%8d%e7%bd%ae%e8%b0%83%e8%af%95%e5%8a%9f%e8%83%bd/" title="phpstorm配置调试功能">phpstorm配置调试功能</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/od%e6%95%b0%e6%8d%ae%e7%aa%97%e5%8f%a3%e5%9c%b0%e5%9d%80-%e6%95%b0%e5%80%bc-%e6%b3%a8%e9%87%8a/" title="od数据窗口地址 数值 注释">od数据窗口地址 数值 注释</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/winfrom-c-dataset%e5%8f%96%e4%b8%b4%e6%97%b6%e8%a1%a8%e7%9a%84%e6%9f%90%e6%95%b0/" title="winfrom c#DataSet取临时表的某数">winfrom c#DataSet取临时表的某数</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e7%a8%8b%e8%be%91%e5%8c%85%e2%80%98rrpack%e2%80%99%e6%98%af%e7%94%a8r%e7%89%88%e6%9c%ac4-0-5-%e6%9d%a5%e5%bb%ba%e9%80%a0%e7%9a%84/" title="程辑包‘rrpack’是用R版本4.0.5 来建造的">程辑包‘rrpack’是用R版本4.0.5 来建造的</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%9a%b4%e5%8a%9b%e7%a0%b4%e8%a7%a3%e9%98%bb%e6%ad%a2-ssh/" title="服务器暴力破解阻止 ssh">服务器暴力破解阻止 ssh</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/datagrip-%e8%bf%9e%e6%8e%a5%e9%98%bf%e9%87%8c%e4%ba%91/" title="datagrip 连接阿里云">datagrip 连接阿里云</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/net-core-%e5%9c%a8%e7%b1%bb%e5%ba%93%e4%b8%ad%e4%bd%bf%e7%94%a8%e5%a4%9a%e8%af%ad%e8%a8%80/" title=".NET core 在类库中使用多语言">.NET core 在类库中使用多语言</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/tp%e4%b8%8a%e4%bc%a0%e8%a7%86%e9%a2%91%e5%88%b0oss/" title="tp上传视频到oss">tp上传视频到oss</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/promise-babel%e4%b8%8d%e8%bf%9b%e8%a1%8c%e8%bd%ac%e6%8d%a2/" title="promise babel不进行转换">promise babel不进行转换</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/wpf-%e5%88%9b%e5%bb%ba%e6%a1%8c%e9%9d%a2%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f/" title="wpf 创建桌面快捷方式">wpf 创建桌面快捷方式</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/c-%e5%8e%8b%e7%bc%a9%e5%9b%be%e7%89%87base64%e5%a4%aa%e9%95%bf/" title="C#压缩图片base64太长">C#压缩图片base64太长</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/python-%e5%ae%89%e8%a3%85-source-distribution/" title="Python 安装 source distribution">Python 安装 source distribution</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e5%88%a0%e9%99%a4%e9%99%a4%e4%ba%86%e6%9f%90%e7%b1%bb%e6%96%87%e4%bb%b6%e4%bb%a5%e5%a4%96%e7%9a%84%e5%85%b6%e4%bb%96%e6%96%87%e4%bb%b6/" title="删除除了某类文件以外的其他文件">删除除了某类文件以外的其他文件</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/maui-%e5%af%b9%e6%af%94flutter/" title="MAUI 对比flutter">MAUI 对比flutter</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/latex%e5%a4%8d%e6%9d%82%e5%ba%a6%e7%9a%84%e5%9c%88%e5%9c%88%e6%80%8e%e4%b9%88%e6%89%93/" title="latex复杂度的圈圈怎么打">latex复杂度的圈圈怎么打</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/session-%e7%94%a8%e5%9f%9f%e5%90%8d%e5%8f%af%e4%bb%a5%e8%ae%bf%e9%97%ae%e9%80%9a-ip%e4%b8%8d%e9%80%9a/" title="session 用域名可以访问通,ip不通">session 用域名可以访问通,ip不通</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/sql%e6%a0%87%e5%87%86%e5%ae%9a%e4%ba%86%e5%93%aa%e5%85%ad%e4%b8%aa%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab/" title="SQL标准定了哪六个隔离级别">SQL标准定了哪六个隔离级别</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/java-epoll-%e8%81%8a%e5%a4%a9%e5%ae%a4/" title="java epoll 聊天室">java epoll 聊天室</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/db2%e5%b5%8c%e5%85%a5%e5%bc%8fsql%e7%bb%91%e5%ae%9a/" title="db2嵌入式sql绑定">db2嵌入式sql绑定</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>