可以通过标记部分向URL添加变量部分 <variable_name>。然后,视图函数将接收<variable_name> 作为关键字参数。(可选)您可以使用转换器指定参数的类型<converter: variable_name>。
格式:<converter: variable_name>
converter是转换器,可以指定变量的类型,也可以不指定,如果不指定的话,默认变量是string类型
例子:
@app.route('/user/<username>')
def user(username):
print(username)
print(type(username))
return username
flask提供的转换器有七个
#: the default converter mapping for the map.
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
测试一下int类型
@app.route('/user/<int:userid>')
def user(userid):
print(userid)
print(type(userid))
# 因为是int类型,所以返回时要先转换成string
return str(userid)
如果输入一个不是int类型的变量则无法访问
如果想要一个自定义变量的格式也是可以实现的
# 自定义转换器
class MyConverter(BaseConverter):
def __init__(self, param, *args):
# args接受url传递的变量规则
super().__init__(param)
self.regex = args[0]
# 使用自定义的转换器,自定义规则的名称为re
app.url_map.converters['re'] = MyConverter
在url中使用
通过正则匹配一个三位数的变量,但是此时变量的类型是string类型
@app.route('/converter/<re("[\d]{3}"):params>')
def myconvert(params):
print(params)
print(type(params))
return params
试试非法的变量
最后说一下url的查询字符串的获取,也就是url的“?”后面的一串参数
@app.route('/')
def index():
print(request.args)
print(request.args.get('ko'))
print(request.args['ko'])
return "hello flask"
输入url
http://127.0.0.1:5000/?hello=flask&ko=ok&name=xiaowang&age=12
后台获取