使用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/lk5ajGnNd1/">spark 入门学习 核心api</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">spark入门教程(3)--Spark 核心API开发 原创 2016年04月13日 20:52:28 标签: spark / 分布式 / 大数据 / 教程 / 应用 4999 本教程源于2016年3 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/MyJx7y2Mzn/">取数据超过内存限制的问题-解决方案(sample,takeSample,filter)</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">遇到的问题 在处理数据过程中,遇到需要取(n)个数的问题,而当样本量过大的时候,就不能简单的take(n),这类问题一般有两种情况: > - 有序取 TopN > - 无序取 N 先来讨论 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/gVdnn44NdW/">云计算和 AWS 概述(一)</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">目录 云计算基础 概念 优势 云计算分类 AWS简介 服务概述 AWS 核心服务 AWS 平台服务 AWS开发和操作服务 AWS 数据中心和可用区(AZ) 区域 可用区 区域名 AWS 云适应框架 ( ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/QV5Za99eJy/">如何理解AWS 网络,如何创建一个多层安全网络架构</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">目录 一.要求 网络架构图 网络各组件关系 二.操作步骤 2.1.网络设置 2.2.安全设置 2.3.创建实例 三.费用 3.1.NAT 网关费用 一.要求 创建一个三层网络架构,服务器只能通过跳板机 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/MyJx7gYEzn/">ubuntu 12.04 下LVS的一些搭建心得和资料整理</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">最近项目上需要使用到IPVS进行负载均衡,针对外部传来的HTTP请求,分摊到多台服务器上进行处理,所以看了一下这方面的资料,在这里纪录一下. Lvs是基于IP层和内容分发请求的负载均衡方法(所以也可以 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/kmzL21yK5G/">《Fluid Engine Development》 学习笔记1-求解线性方程组</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">我个人对基于物理的动画很感兴趣,最近在尝试阅读<Fluid Engine Development>,由于内容涉及太多的数学问题,而单纯学习数学又过于枯燥,难以坚持学习(我中途放弃好多次了) ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/GBJrBWvKJ0/">VMware vSphere 6 序列号大全</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">  经过测试ESXI6.5也可以使用. vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/nAJvamymzr/">vue中使用axios下载文件,兼容IE11</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">一.设置axios返回值为blob 二.使用a标签的down属性下载,如果是IE浏览器,可以使用navigator.msSaveBlob进行下载 // data的数据类型是blob downloadF ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/n2d9KpLwJD/">windows服务器入门 初始化数据盘</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">本人在寒假的时候自行搭建了一个服务器,在此分享一下我的方法.本人服务器的系统为Windows 2012R2 在后面的讲解中中文英文都会有    所以不用在意系统的语言问题 1)第一步  自然就是打开服 ...</p> </li> <li><a href="https://www.shuzhiduo.com/A/E35prMjLzv/">golang 切片和map查询比较</a> <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">package main import ( "fmt" "time" ) var testTimeSlice = []string{"aa" ...</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/java-aio-%e6%95%99%e7%a8%8b/" title="java aio 教程">java aio 教程</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/python-unpack%e4%ba%8c%e8%bf%9b%e5%88%b6%e6%96%87%e4%bb%b6/" title="python unpack二进制文件">python unpack二进制文件</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/ubuntu%e5%9b%be%e5%bd%a2%e7%95%8c%e9%9d%a2%e4%b8%ad%e7%94%a8%e6%88%b7%e4%b8%8d%e5%9c%a8sudoers%e4%b8%ad/" title="ubuntu图形界面中用户不在sudoers中">ubuntu图形界面中用户不在sudoers中</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/delpin%e8%ae%a1%e7%ae%97%e5%ad%97%e7%ac%a6%e9%95%bf%e5%ba%a6/" title="delpin计算字符长度">delpin计算字符长度</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/javastring%e9%a2%98%e7%9b%ae/" title="JavaString题目">JavaString题目</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/efcore-%e4%b8%80%e4%b8%aa%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%9a%e4%b8%aadbcontext/" title="efcore 一个数据库多个dbcontext">efcore 一个数据库多个dbcontext</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/layui%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e6%87%92%e5%8a%a0%e8%bd%bd%e6%a0%91/" title="layui如何实现懒加载树">layui如何实现懒加载树</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/excel-%e8%bf%bd%e5%8a%a0%e6%95%b0%e6%8d%ae/" title="excel 追加数据">excel 追加数据</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/chrome-%e8%bf%9c%e7%a8%8bcontent-script/" title="chrome 远程content script">chrome 远程content script</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e8%8e%b7%e5%8f%96%e8%ae%be%e5%a4%87%e6%8f%8f%e8%bf%b0%e7%ac%a6%e5%89%8d8%e4%b8%aa%e5%ad%97%e8%8a%82%e7%9a%84%e5%8a%a8%e4%bd%9c/" title="获取设备描述符前8个字节的动作">获取设备描述符前8个字节的动作</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e9%94%99%e8%af%aflnk2019%e6%97%a0%e6%b3%95%e8%a7%a3%e6%9e%90%e7%9a%84%e5%a4%96%e9%83%a8%e7%ac%a6%e5%8f%b7-dll-%e6%98%be%e5%bc%8f%e9%ab%98%e8%b0%83%e7%94%a8/" title="错误LNK2019无法解析的外部符号 DLL 显式高调用">错误LNK2019无法解析的外部符号 DLL 显式高调用</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/beautifulsoup-class%e5%90%8d-%e7%a9%ba%e6%a0%bc/" title="beautifulsoup class名 空格">beautifulsoup class名 空格</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/android-killer-%e8%b5%84%e6%ba%90%e5%9b%9e%e7%bc%96%e8%af%91%e5%a4%b1%e8%b4%a5/" title="Android killer 资源回编译失败">Android killer 资源回编译失败</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/c%e8%af%ad%e8%a8%80%e6%89%be%e5%87%ba%e7%bb%9d%e5%af%b9%e5%80%bc%e6%9c%80%e5%b0%8f%e7%9a%84%e6%95%b0/" title="c语言找出绝对值最小的数">c语言找出绝对值最小的数</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/varargin%e4%b8%8d%e8%be%93%e5%85%a5%e4%b8%9c%e8%a5%bf%e6%97%b6%e6%98%af%e4%bb%80%e4%b9%88/" title="varargin不输入东西时是什么">varargin不输入东西时是什么</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/ios-%e5%90%8e%e5%8f%b0%e4%bb%bb%e5%8a%a1%e6%8c%81%e7%bb%ad%e5%a4%9a%e4%b9%85-180%e7%a7%92/" title="iOS 后台任务持续多久 180秒">iOS 后台任务持续多久 180秒</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/netcore%e8%b6%85%e8%bf%87java%e6%80%a7%e8%83%bd/" title="netcore超过java性能">netcore超过java性能</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/%e6%89%ab%e7%a0%81%e8%8e%b7%e5%8f%96%e5%85%ac%e4%bc%97%e5%8f%b7%e7%94%a8%e6%88%b7openid/" title="扫码获取公众号用户openid">扫码获取公众号用户openid</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/request-getsession-%e8%bf%98%e6%98%afresponse/" title="request getsession 还是response">request getsession 还是response</a> </div> <div class="tag-items" style="float: left;"> <a href="https://www.shuzhiduo.com/topic/intel-cpu%e7%bc%96%e5%8f%b7-%e6%80%8e%e4%b9%88%e7%9c%8b/" title="intel cpu编号 怎么看">intel cpu编号 怎么看</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>