AD19 add pins to nets错误_7. Flask URL默认转换器、自定义转换器、to_python、to_url

Flask框架自带的转换器类型

  • int转换器 :接收整数
  • float转换器 : 接收浮点数
  • string转换器 : 接收string类型(默认则是string转换器)
  • path转换器 :和默认的相似,但也接收斜线

设置int类型的路径参数

# 转换器 

测试访问 http://127.0.0.1:5000/goods_info/123

8a215b1bc9d91326bb8f99aef1e870e2.png

设置float转换器的路径参数

# 设置float转换器
  • 测试访问 http://127.0.0.1:5000/goods_info/123.123
ca0cc19dd0a1c11ec8d862bae56d1e25.png

可以发现参数为float参数是能够正常访问处理的。

  • 测试访问 http://127.0.0.1:5000/goods_info/123
d8171d01b7b95636b870ed3ad5d4b02d.png

当传递参数为 123 整数的时候,则报错Not Found

  • 测试访问 http://127.0.0.1:5000/goods_info/hello
ef7d7b92b0026e4b295d10c614d53031.png

当传递参数为 hello 字符串的时候,则报错Not Found

设置string类型的路径参数

# 设置转换器 

测试访问 http://127.0.0.1:5000/goods_info/你好

fd460566c252628661bccd317439634c.png

可以看到中文的字符串参数也是可以直接获取的。

  • 其中如果转换器不写类型,默认就是string类型的,示例如下:
# 设置转换器 默认是string

设置path转换器的路径参数

# 设置path转换器

测试访问:http://127.0.0.1:5000/goods_info/hello//world/123

2807653692ac6bf4b22206afff1e2344.png

可以看到 path转换器 可以接收斜杠 / 将后面所有的字符串都作为参数传递。

上面的这几种Flask自带的转换器虽然可以设置很多参数了,但是还是无法匹配一些特殊需求的路径参数。

例如:在发送短信的URL中,路径参数设置为手机号码,上面的自带类型就无法精确匹配手机号码了。

这时候就需要自定义路由转换器出场了。

自定义路由转换器

1.自定义路由转换器的基础类:

from werkzeug.routing 

2.创建自定义转换器,以及将转换器加入Flask应用中:

# 创建自定义转换器

3.在视图函数中设置自定义路由转换器re:

# 127.0.0.1:5000/send/18912345678

4.测试访问符合正则匹配的电话号码的url

访问 http://127.0.0.1:5000/send/18912345678

83e7813d7adc367e28a122cc8b5af955.png

5.测试访问不符合正则匹配的url

访问 http://127.0.0.1:5000/send/189123

dc0d1665eb8648c2c86ca62ee1c29e6c.png

根据不符合正则匹配的URL参数,则报错Not Found。从效果来看,就可以知道通过这个自定义的转换器,我们可以实现这种特殊的参数获取。

创建专属手机号码的转换器

上面的转换器可以传递正则匹配的规则,属于一种万能转换器,下面将其创建一个专属手机号码的转换器。

# 创建Moblie的专属转换器

其实这个例子主要是想说明Flask可以创建多个自定义转换器。

另外,在Django中有中间类这个类方法来处理url请求至视图函数之间的业务处理,例如:权限验证,session数据记录等等。

在Flask中可以使用专属转换器的to_pythonto_url两个函数来实现类似中间类这样的功能。

下面来看看。

查看BaseConverter类中的源码

class BaseConverter(object):

首先从源码来分析一下这个继承类中to_pythonto_url函数。

  • to_python 将url传递的参数,直接将其传递至视图函数之中
  • to_url 则是当另一个视图函数使用 url_for() 这个方法跳至该转换器的时候,会将url的参数传递到url路径的参数中。

单单这么解释有些抽象,下面来看看示例。

to_python 函数

# 创建Moblie的专属转换器

此时测试访问 http://127.0.0.1:5000/send/18912345678

按照原来访问后在浏览器会打印 send sms to 18912345678 的信息,但是由于to_python 设置返回是 "abc",所以浏览器将会打印 send sms to abc,下面来浏览器执行验证看看,如下:

50c646c918543d1cefccae9a16f5835a.png

从浏览器就可以判断出to_python方法就是url传递到视图函数中间的业务处理方法,其实就相当于Django的中间类。

如果有权限验证类的需求,可以在to_python中实现。

to_url 函数

# 创建Moblie的专属转换器

这个示例是首先访问 hello_send 视图函数,然后使用 url_for函数跳转至 send_sms 视图函数。

在这种过程中,hello_send 视图函数跳转的时候设置的路径参数为 mobile_num=18612345678

那么正常在浏览器转发后的url访问应该是:http://127.0.0.1:5000/send/18612345678

但是由于to_url返回的是15811111111,所以最终跳转的url显示会是 http://127.0.0.1:5000/send/15811111111

下面来确认看看,访问http://127.0.0.1:5000/hello_send

c5d67f36ddf3c6362dc0b4c59b22d4d7.png

可以从图中的传递说明,应该基本上都可以看出参数的传递过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值