Python全系列 教程
3567个小节阅读:5930.4k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
问题
为什么路径参数可以直接识别数据类型?
提示
从
werkzeug.routing
导入BaseConverter
类 了解底层
int
路径参数底层调用IntegerConverter
类来作格式判断
float
路径参数底层调用FloatConverter
类来作格式判断
string
路径参数底层调用StringConverter
类来作格式判断
如果遇到需要匹配提取/sms_codes/1688888888
中的手机号数据,Flask内置的转换器就无法满足需求,此时需要自定义转换器。
自定义转换器主要做3步
创建转换器类,保存匹配时的正则表达式
xxxxxxxxxx
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
"""
手机号格式
"""
regex = r'1[3-9]\d{9}'
注意
regex
名字是固定的
将自定义的转换器告知Flask应用
xxxxxxxxxx
app = Flask(__name__)
# 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: mobile
app.url_map.converters['mobile'] = MobileConverter
在使用转换器的地方定义使用
xxxxxxxxxx
@app.route('/sms_codes/<mobile:mob_num>')
def send_sms_code(mob_num):
return 'send sms code to {}'.format(mob_num)
在转换器类中,实现to_python(self,value)
方法,这个方法的返回值,将会传递到 view函数中作为参数
在转换器类中,实现to_url(self,values)
方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的URL形式。
xxxxxxxxxx
#需求2:查询多个模块的数据
#传统的思路实现
@app.route('/news_list/<modules>/')
def news_list(modules):
#modules是路径参数
print(modules)
#http://127.0.0.1:5000/news_list/hots+enter/
#需要对modules进行拆分
lm = modules.split('+')
print(lm)
print(lm[0])
print(lm[1])
#拆分后需要去数据库 select * from news where nmodule= 'hots' ornmoudle= 'enter'
return f'你要查询的模块是:{lm}'
class LiConverter(BaseConverter):
# 1.在转换器类中,实现to_python(self,value)方法,这个方法的返回值,将会传递到 view函数中作为参数。
def to_python(self, value):
return value.split('+') #可以对value进行加工后再返回
# 2.在转换器类中,实现to_url(self,values)方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的URL形式。
def to_url(self, value):
# return "hello"
#['hots','enter']---->hots+enter
return "+".join(value)
app.url_map.converters['li']=LiConverter
实时学习反馈
3. 下面对BaseConverter自定转换器说法错误的是?
A 可以通过to_regex
处理数据逻辑
B 可以通过to_repr
处理数据类型
C 可以通过to_string
处理数据类型
D 可以通过to_python
处理数据类型
答案
3=>D