如何在Flask中向函数传递参数?我的search函数无法运行
Flask新手问题:search函数无法通过URL调用的解决方法
问题描述
我是Flask完全新手,遇到问题卡壳了。我想要实现一个从URL中获取姓名的函数,若该姓名存在于列表中,则返回该人物的详细信息。教程中的函数能正常运行,但我自己写的search函数却不行。
原代码:
import re from datetime import datetime from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, Flask!" @app.route("/hello/<name>") def hello_there(name): now = datetime.now() formatted_now = now.strftime("%A, %d %B, %Y at %X") # Filter the name argument to letters only using regular expressions. URL arguments # can contain arbitrary text, so we restrict it to safe characters only. match_object = re.match("[a-zA-Z]+", name) if match_object: clean_name = match_object.group(0) else: clean_name = "Friend" content = "Hello there, " + clean_name + "! It's " + formatted_now return content def search(name): people = [ {'firstName': "Tom",'lastName':'Beker', 'age': 10, 'profession':'cat'}, {'firstName': "Jerry",'lastName':'Taylor', 'age': 15, 'profession':'mouse'}, {'firstName': "Lucky",'lastName':'Luke', 'age': 22, 'profession':'cowboy'}, {'firstName': "Joe",'lastName':'Dalton', 'age': 30, 'profession':'bandit'}, {'firstName': "Sam",'lastName':'Dragon', 'age': 10, 'profession':'superHero'} ] return [element for element in people if element['lastName'] == name]
问题原因
search函数没有添加Flask的路由装饰器,Flask无法识别这个函数对应的URL路径,无法处理外部请求。- 直接返回Python列表不符合HTTP响应规范,需要转为标准的JSON格式才能被浏览器/客户端正确解析。
解决方法
- 从
flask导入jsonify工具,用于将Python数据结构转为合法的JSON响应 - 给
search函数添加路由装饰器,指定对应的URL访问路径 - 用
jsonify包装返回结果,确保输出符合HTTP响应要求
修改后的完整代码:
import re from datetime import datetime from flask import Flask, jsonify # 新增jsonify导入 app = Flask(__name__) @app.route("/") def home(): return "Hello, Flask!" @app.route("/hello/<name>") def hello_there(name): now = datetime.now() formatted_now = now.strftime("%A, %d %B, %Y at %X") match_object = re.match("[a-zA-Z]+", name) if match_object: clean_name = match_object.group(0) else: clean_name = "Friend" content = "Hello there, " + clean_name + "! It's " + formatted_now return content # 新增路由装饰器,绑定URL路径 @app.route("/search/<name>") def search(name): people = [ {'firstName': "Tom",'lastName':'Beker', 'age': 10, 'profession':'cat'}, {'firstName': "Jerry",'lastName':'Taylor', 'age': 15, 'profession':'mouse'}, {'firstName': "Lucky",'lastName':'Luke', 'age': 22, 'profession':'cowboy'}, {'firstName': "Joe",'lastName':'Dalton', 'age': 30, 'profession':'bandit'}, {'firstName': "Sam",'lastName':'Dragon', 'age': 10, 'profession':'superHero'} ] # 用jsonify包装结果,返回标准JSON响应 return jsonify([element for element in people if element['lastName'] == name])
现在你可以通过访问http://localhost:5000/search/Dalton这类URL测试功能,会返回对应人物的JSON格式详细信息。
内容的提问来源于stack exchange,提问作者Vasilis
相关产品推荐
相关产品推荐

