Implementing add Movie functionality
Add a Button to Movies Page¶
In the movies.html
add a button
<a href="/add_movie"><button>Add Movie</button></a>
Create the HTML Form¶
- Template (
add_movie.html
):<!-- Jinja Extends code --> <h1>Add a New Movie</h1> <form action="/add_movie" method="post"> <label for="title">Title:</label> <input type="text" id="title" name="title" required><br> <label for="year">Year:</label> <input type="number" id="year" name="year" required><br> <label for="genre">Genre:</label> <input type="text" id="genre" name="genre" required><br> <label for="director">Director:</label> <input type="text" id="director" name="director"><br> <label for="cast">Cast:</label> <div id="cast-members"> <div> <select name="cast_member"> {% for cast in cast_members %} <option value="{{ cast._id }}">{{ cast.name }}</option> {% endfor %} </select> <input type="text" name="role" placeholder="Role"> </div> </div> <button type="button" onclick="addCastMember()">Add Another Cast Member</button><br> <button type="submit">Add Movie</button> </form> <script> function addCastMember() { var castDiv = document.getElementById('cast-members'); var newCast = document.createElement('div'); newCast.innerHTML = \` <select name="cast_member"> {% for cast in cast_members %} <option value="{{ cast._id }}">{{ cast.name }}</option> {% endfor %} </select> <input type="text" name="role" placeholder="Role"> \`; castDiv.appendChild(newCast); } </script> <!-- Jinja extends end -->
Handle Form Submission in Flask¶
-
Route to Display Form:
@app.route('/add_movie') def add_movie(): cast_members = mongo.db.cast.find() return render_template('add_movie.html', cast_members=cast_members)
-
Route to Handle Form Submission:
@app.route('/add_movie', methods=['POST']) def add_movie_post(): title = request.form['title'] year = request.form['year'] genre = request.form['genre'] director = request.form.get('director') cast_members = request.form.getlist('cast_member') roles = request.form.getlist('role') cast = [] for cast_member, role in zip(cast_members, roles): cast.append({ '_id': ObjectId(cast_member), 'role': role }) movie = { 'title': title, 'year': year, 'genre': genre, 'director': director, 'cast': cast, 'reviews': [] } mongo.db.movies.insert_one(movie) return redirect('/movies')