You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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格式才能被浏览器/客户端正确解析。

解决方法

  1. 从flask导入jsonify工具,用于将Python数据结构转为合法的JSON响应
  2. 给search函数添加路由装饰器,指定对应的URL访问路径
  3. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:01:09