Flask新手开发电影应用REST API CRUD时PUT更新功能出错求助
问题修正与实现方案
现有PUT接口的错误点
- 没有指定要更新的目标电影ID,和你现有的DELETE、单条查询接口逻辑不统一
- 直接创建新的
Peliculas对象追加到列表,属于新增逻辑,完全没有修改原有条目
正确实现逻辑
- 路由规则添加
id_edit_movie路径参数,用于指定要更新的电影ID - 遍历
movies_list匹配对应ID的电影条目,匹配失败直接返回404 - 用请求体中的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
相关产品推荐
相关产品推荐

