Skip to content

Implementing Update and Delete operations for movies

Update Operation

Display the Update Form:**

  • Purpose: Provide a form pre-filled with the current movie details.
  • HTML Template (edit_movie.html):
    <!-- Jinja extends -->
        <h1>Edit Movie</h1>
        <form action="/movies/{{ movie._id }}/update" method="post">
          <label for="title">Title:</label>
          <input type="text" id="title" name="title" value="{{ movie.title }}" required><br>
    
          <label for="year">Year:</label>
          <input type="number" id="year" name="year" value="{{ movie.year }}" required><br>
    
          <label for="genre">Genre:</label>
          <input type="text" id="genre" name="genre" value="{{ movie.genre }}" required><br>
    
          <label for="director">Director:</label>
          <input type="text" id="director" name="director" value="{{ movie.director }}"><br>
    
          <button type="submit">Update Movie</button>
        </form>
      <!-- Jinja close -->
    

Handle Update Form Submission in Flask:**

  • Route to Display Update Form:

    @app.route('/movies/<movie_id>/edit')
    def edit_movie(movie_id):
        movie = mongo.db.movies.find_one({'_id': ObjectId(movie_id)})
        return render_template('edit_movie.html', movie=movie)
    

  • Route to Handle Update Submission:

    @app.route('/movies/<movie_id>/update', methods=['POST'])
    def update_movie(movie_id):
        title = request.form['title']
        year = request.form['year']
        genre = request.form['genre']
        director = request.form.get('director')
    
        mongo.db.movies.update_one(
            {'_id': ObjectId(movie_id)},
            {'$set': {
                'title': title,
                'year': year,
                'genre': genre,
                'director': director
            }}
        )
        return redirect('/')
    

Delete Operation

Delete Button in Movie Details Page

  • HTML Template Snippet:
    <form action="/movies/{{ movie._id }}/delete" method="post" onsubmit="return confirm('Are you sure you want to delete this movie?');">
      <button type="submit">Delete Movie</button>
    </form>
    

Handle Delete Request in Flask

  • Route to Handle Deletion:
    @app.route('/movies/<movie_id>/delete', methods=['POST'])
    def delete_movie(movie_id):
        mongo.db.movies.delete_one({'_id': ObjectId(movie_id)})
        return redirect('/movies')