Flask框架——给视图传参数

如何实现数据交互(通过浏览器给接口传入参数)

要想传入参数,可以通过一个语法,这个语法就是<>(尖括号)
	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]代表的就是后面的正则表达式。

猜你喜欢

转载自blog.csdn.net/weixin_43617255/article/details/83823535