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

Flask新手开发电影应用REST API CRUD时PUT更新功能出错求助

问题修正与实现方案

现有PUT接口的错误点

  • 没有指定要更新的目标电影ID,和你现有的DELETE、单条查询接口逻辑不统一
  • 直接创建新的Peliculas对象追加到列表,属于新增逻辑,完全没有修改原有条目

正确实现逻辑

  1. 路由规则添加id_edit_movie路径参数,用于指定要更新的电影ID
  2. 遍历movies_list匹配对应ID的电影条目,匹配失败直接返回404
  3. 用请求体中的JSON字段覆盖原有条目的属性即可,不需要新建对象追加

修正后的代码

@app.route("/movies/<id_edit_movie>", methods=['PUT'])
def edit_movie(id_edit_movie):
    target_id = int(id_edit_movie)
    # 查找要更新的电影条目
    target_movie = None
    for pelicula in movies_list:
        if pelicula.idpelicula == target_id:
            target_movie = pelicula
            break
    # 未找到对应电影返回404
    if not target_movie:
        return "Pelicula no encontrada", 404
    # 用请求参数更新字段
    movie_data = request.get_json()
    # 用get方法支持部分字段更新,不传的字段保留原有值
    target_movie.nombre = movie_data.get("nombre", target_movie.nombre)
    target_movie.descripcion = movie_data.get("descripcion", target_movie.descripcion)
    target_movie.elenco = movie_data.get("elenco", target_movie.elenco)
    target_movie.restriccionedad = movie_data.get("restriccionedad", target_movie.restriccionedad)
    target_movie.fecha = movie_data.get("fecha", target_movie.fecha)
    target_movie.calificacion = movie_data.get("calificacion", target_movie.calificacion)
    return "OK", 200

补充说明

如果你的业务要求更新时必须传全量字段,不需要支持部分更新,可以把dict.get换成直接取值的写法即可。

内容的提问来源于stack exchange,提问作者YasuoUy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:00:05