📋 个人简介
- 💖 作者简介:大家好,我是阿牛。😜
- 📝 博主的个人网站:阿牛的博客小屋🔥
前言
这节我们写一下url路径参数的获取以及转换器的使用,学一下如何在我们的的url路径中加参数以及如何使用转换器,并且自定义转换器。
url路径参数(动态路由)
例如,有一个请求访问的接口地址为/users/12,其中12实际上为具体的请求参数,表明请求12号用户的信息。此时如何从 url 中提取出12的数据?
Flask不同于Django直接在定义路由时编写正则表达式,而是采用转换器语法:
#导入Flask类和蓝图
from flask import Flask,Blueprint
# 从配置对象中加载的默认配置
class DefaultConfig(object):
SECERT_KEY = 'jstwn63bng'
# 创建Flask项目的工厂函数
def create_flask_app(config):
app = Flask(__name__)
app.config.from_object(config)
return app
#1.创建一个蓝图对像
user_Bp = Blueprint('user',__name__)
#2.在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器
@user_Bp.route('/users/<user_id>')
def user(user_id):
return "我是" + user_id + "号"
#3.在应用对象上注册这个蓝图对象
app.register_blueprint(user_Bp)
代码中的<>即是一个转换器,默认为字符串类型,即将该位置的数据以字符串格式进行匹配,并以字符串为数据类型,user_id为参数名传入视图。
采用flask新的运行方式,在当前项目的终端输入:flask run指令,项目成功运行
转换器的使用
上面代码中的<>是一个转换器,默认为字符串类型,但是我们的Flask也提供其他类型的转换器:
转换器字典:
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
将上面的例子以整型匹配数据,可以如下使用:
@user_Bp.route('/users/<int:user_id>')
自定义转换器
如果遇到需要匹配提取/sms_codes/18543622578 中的手机号数据,Flask内置的转换器就不行了,此时就需要自定义转换器。
定义转换器
自定义转换器主要做3步
1.创建转换器类,保存匹配时的正则表达式
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
#手机号格式
# 注意:regex名字固定
regex = r'1[3-9]\d{9}'
注意:regex名字固定
2.将自定义的转换器告知Flask应用
app = Flask(__name__)
# 将自定义的转换器添加到转换器字典中,并指定转换器使用时的名字为:mobile
app.url_map.converters['mobile'] = MobileConverter
3.在使用转换器的地方定义使用
@app.route('/sms_codes/<mobile:phone_num>')
def sms_code(phone_num):
return 'send sms_code to {}'.format(phone_num)
示例
#导入Flask类
from flask import Flask
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
#手机号格式
# 注意:regex名字固定
regex = r'1[3-9]\d{9}'
app = Flask(__name__)
# 将自定义的转换器添加到转换器字典中,并指定转换器使用时的名字为:mobile
app.url_map.converters['mobile'] = MobileConverter
@app.route('/sms_codes/<mobile:phone_num>')
def sms_code(phone_num):
return 'send sms_code to {}'.format(phone_num)
结语
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。