#python #flask
Вопрос:
Вот в чем дело, я пытался создать crud для api rest для приложения для фильмов, я смог успешно выполнить функции с помощью flask для создания фильма в json, удаления фильма и их перечисления, но у меня возникли проблемы с возможностью редактирования одного из фильмов в JSON, так как я не знаю, как получить доступ к его сектору, чтобы иметь возможность его изменить, вот что я пытался сделать.:
def __init__(self, idpelicula, nombre, descripcion, elenco, restriccionedad, fecha, calificacion):
self.idpelicula = idpelicula
self.nombre = nombre
self.descripcion = descripcion
self.elenco = elenco
self.restriccionedad = restriccionedad
self.fecha = fecha
self.calificacion = calificacion
movies_list = [
Peliculas(1, "Shrek", "Pelicula de Ogro", "Shrek, Fiona", " APTA", "2001", "10"),
Peliculas(2, "Shrek2", "Otra Pelicula de Ogro", "Shrek, Fiona", " APTA", "2005", "10"),
]
@app.route("/movies")
def list_movies():
return jsonify([pelicula.__dict__ for pelicula in movies_list])
@app.route("/movies/<id_search_movie>")
def obtener_pelicula(id_search_movie):
for pelicula in movies_list:
if pelicula.idpelicula == int(id_search_movie):
return jsonify(pelicula.__dict__)
return "Pelicula no encontrada", 404
@app.route("/movies", methods=['POST'])
def create_movie():
movie_data = request.get_json()
new_movie = Peliculas(movie_data["idpelicula"], movie_data["nombre"], movie_data["descripcion"],
movie_data["elenco"], movie_data["restriccionedad"], movie_data["fecha"],
movie_data["calificacion"])
movies_list.append(new_movie)
return "OK", 200
@app.route("/movies/<id_delete_movie>", methods=['DELETE'])
def delete_movie(id_delete_movie):
for pelicula in movies_list:
if pelicula.idpelicula == int(id_delete_movie):
movies_list.remove(pelicula)
return "OK", 200
Это то, что я не знаю, как сделать (я знаю, что это неправильно, и что это даже не логика для этого), но это то, что я пытался:
@app.route("/movies", methods=['PUT'])
def edit_movie():
movie_data = request.get_json()
new_movie = Peliculas(movie_data["idpelicula"], movie_data["nombre"], movie_data["descripcion"],
movie_data["elenco"], movie_data["restriccionedad"], movie_data["fecha"],
movie_data["calificacion"])
movies_list.append(new_movie)
return "OK", 200
Любая помощь, даже с точки зрения логики, лежащей в основе этого, пригодится. Спасибо вам всем.
Ответ №1:
В данный момент существует масса проблем с тем, как вы это кодируете, но здесь я покажу вам, как вы можете редактировать объект так, как вы это делаете в настоящее время.
Поэтому при вашем подходе представление редактирования должно быть таким:
@app.route("/movies", methods=['PUT'])
def edit_movie():
# Accessing data from request
movie_data = request.get_json()
# Accesing Object from the movie-list by ID
for movie in movies_list:
if movie.idpelicula == movie_data["idpelicula"]:
edited_movie = movie
# Modifying the object attributes
for name, value in movie_data.items():
if hasattr(edited_movie, name):
setattr(edited_movie, name, value)
return "OK", 200
Проблема здесь в том, что вы создавали новый экземпляр вместо редактирования существующего.
в будущем вы могли бы изучить использование моделей SQLAlchemy, чтобы вы могли сохранять данные в базе данных и по-прежнему управлять объектами.
PD1: Наконец, я рекомендую вам быть последовательным в именовании, под этим я подразумеваю, что если вы вызываете свои переменные и классы на испанском языке Pelicula, peliculas, попробуйте использовать одно и то же имя во всем своем коде, то же самое, если вы используете английский.
PD2: Изучите некоторые основы использования классов и присвоения переменных в python, чтобы вы могли улучшить свой код.
Привет из Чили.
Комментарии:
1. Я знаю, я нахожусь в своем 3-м или 4-м классе python, ха-ха, и я примерно смог написать этот код, ха-ха-ха, большое вам спасибо, и вы правы, что мне придется поддерживать согласованность с именами. Мы очень признательны за помощь. Привет из Уругвая.