如何实现数据交互(通过浏览器给接口传入参数)
要想传入参数,可以通过一个语法,这个语法就是<>(尖括号)
from flask import Flask
app = Flask(__name__)
# 传入参数:通过url地址给视图函数传递参数
# 使用语法:<>,括号里面存储的是参数,可以返回字符串/数值.
#默认的数据类型是字符串,注意,str兼容数值,我们也可以限制数据类型int/float,(@app.route('/<int:text>') #只能输入整数)
#<>中的实现是通过转换器实现的。
@app.route('/<text>')
def index(text):
return 'hello %s '% text
if __name__ == '__main__':
print(app.url_map)
app.run()
转换器
Flask内置的六种转换器:
1. 'default' UnicodeConverter
2. 'string' UnicodeConverter
3. 'any' AnyConverter
4. 'path' PathConverter
5. 'int' intConverter
6. 'float' FloatConverter
7. 'uuid' UUIDConverter
转换器的作用:限制url地址栏中的数据类型。
问:如何限制地址栏中的数据长度呢?
自定义转换器
from flask import Flask
# 导入flask内置的基类转换器
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 传入参数:通过url地址给视图函数传递参数
# 使用语法:<>,是通过转换器实现的.
@app.route('/<text>')
def index(text):
return 'hello %s '% text
# 自定义转换器
class RegexConverter(BaseConverter):
regex = '[a-z]{3}'
# 添加自定义的转换器给默认转换器的字典容器
app.url_map.converters['re'] = RegexConverter
@app.route('/regex/re:<text>')
def hello(text):
return 'hello %s' %text
if __name__ == '__main__':
print(app.url_map)
app.run()
但是这种定义模式的正则表达式是固定的,扩展型不强。
from flask import Flask
# 导入flask内置的基类转换器
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 传入参数:通过url地址给视图函数传递参数
# 使用语法:<>,是通过转换器实现的.
@app.route('/<text>')
def index(text):
return 'hello %s '% text
# 自定义转换器
class RegexConverter(BaseConverter):
def __init__(self,map,*args):
super(RegexConverter, self).__init__(map)
self.regex[0]
# 添加自定义的转换器给默认转换器的字典容器
app.url_map.converters['re'] = RegexConverter
@app.route('/regex/re("[a-z]{4}"):<text>')
def hello(text):
return 'hello %s' %text
if __name__ == '__main__':
print(app.url_map)
app.run()
参数map指的是映射列表,args[0]代表的就是后面的正则表达式。