8
8
9
9
# CONSTANTS
10
10
11
- MOVIE_DB_API_KEY = "YOUR API KEY "
11
+ MOVIE_DB_API_KEY = "Your Own API key "
12
12
MOVIE_DB_SEARCH_URL = "https://api.themoviedb.org/3/search/movie"
13
13
MOVIE_DB_INFO_URL = "https://api.themoviedb.org/3/movie"
14
14
MOVIE_DB_IMAGE_URL = "https://image.tmdb.org/t/p/w500"
26
26
db = SQLAlchemy (app )
27
27
28
28
29
- # creating table
29
+ ##CREATE TABLE
30
30
class Movie (db .Model ):
31
31
id = db .Column (db .Integer , primary_key = True )
32
32
title = db .Column (db .String (250 ), unique = True , nullable = False )
@@ -41,64 +41,76 @@ class Movie(db.Model):
41
41
db .create_all ()
42
42
43
43
44
- # edit the rating and reviews
44
+ class FindMovieForm (FlaskForm ):
45
+ title = StringField ("Movie Title" , validators = [DataRequired ()])
46
+ submit = SubmitField ("Add Movie" )
47
+
45
48
46
49
class RateMovieForm (FlaskForm ):
47
50
rating = StringField ("Your Rating Out of 10 e.g. 7.5" )
48
51
review = StringField ("Your Review" )
49
52
submit = SubmitField ("Done" )
50
53
51
54
52
- # find movies from The Movie Database
53
- class FindMovieForm (FlaskForm ):
54
- title = StringField ('Movie Title' , validators = [DataRequired ()])
55
- submit = SubmitField ("Add Movie" )
55
+ @app .route ("/" )
56
+ def home ():
57
+ all_movies = Movie .query .order_by (Movie .rating ).all ()
58
+ for i in range (len (all_movies )):
59
+ all_movies [i ].ranking = len (all_movies ) - i
60
+ db .session .commit ()
61
+ return render_template ("index.html" , movies = all_movies )
56
62
57
63
58
- @app .route ('/' )
59
- def home ():
60
- # get all the movies from DB
61
- all_movies = Movie .query .all ()
62
- return render_template ('index.html' , movies = all_movies )
64
+ @app .route ("/add" , methods = ["GET" , "POST" ])
65
+ def add_movie ():
66
+ form = FindMovieForm ()
67
+ if form .validate_on_submit ():
68
+ movie_title = form .title .data
69
+
70
+ response = requests .get (MOVIE_DB_SEARCH_URL , params = {"api_key" : MOVIE_DB_API_KEY , "query" : movie_title })
71
+ data = response .json ()["results" ]
72
+ return render_template ("select.html" , options = data )
73
+ return render_template ("add.html" , form = form )
74
+
75
+
76
+ @app .route ("/find" )
77
+ def find_movie ():
78
+ movie_api_id = request .args .get ("id" )
79
+ if movie_api_id :
80
+ movie_api_url = f"{ MOVIE_DB_INFO_URL } /{ movie_api_id } "
81
+ response = requests .get (movie_api_url , params = {"api_key" : MOVIE_DB_API_KEY , "language" : "en-US" })
82
+ data = response .json ()
83
+ new_movie = Movie (
84
+ title = data ["title" ],
85
+ year = data ["release_date" ].split ("-" )[0 ],
86
+ img_url = f"{ MOVIE_DB_IMAGE_URL } { data ['poster_path' ]} " ,
87
+ description = data ["overview" ]
88
+ )
89
+ db .session .add (new_movie )
90
+ db .session .commit ()
91
+ return redirect (url_for ("rate_movie" , id = new_movie .id ))
63
92
64
93
65
- @app .route (' /edit' , methods = ["GET" , "POST" ])
94
+ @app .route (" /edit" , methods = ["GET" , "POST" ])
66
95
def rate_movie ():
67
- # inherit form the class
68
96
form = RateMovieForm ()
69
- # get the id
70
- movie_id = request .args .get ('id' )
71
- # check with db
97
+ movie_id = request .args .get ("id" )
72
98
movie = Movie .query .get (movie_id )
73
- # if the id match then update
74
99
if form .validate_on_submit ():
75
100
movie .rating = float (form .rating .data )
76
101
movie .review = form .review .data
77
102
db .session .commit ()
78
103
return redirect (url_for ('home' ))
79
- return render_template (' edit.html' , movie = movie , form = form )
104
+ return render_template (" edit.html" , movie = movie , form = form )
80
105
81
106
82
- @app .route (' /delete' )
107
+ @app .route (" /delete" )
83
108
def delete_movie ():
84
109
movie_id = request .args .get ("id" )
85
110
movie = Movie .query .get (movie_id )
86
111
db .session .delete (movie )
87
112
db .session .commit ()
88
- return redirect (url_for ('home' ))
89
-
90
-
91
- @app .route ('/add' , methods = ["GET" , "POST" ])
92
- def add_movie ():
93
- form = FindMovieForm ()
94
-
95
- # get information from The Movie database
96
- if form .validate_on_submit ():
97
- movie_title = form .title .data
98
- response = requests .get (MOVIE_DB_SEARCH_URL , params = {"api_key" : MOVIE_DB_API_KEY , "query" : movie_title })
99
- data = response .json ()["results" ]
100
- return render_template ("select.html" , options = data )
101
- return render_template ("add.html" , form = form )
113
+ return redirect (url_for ("home" ))
102
114
103
115
104
116
if __name__ == '__main__' :
0 commit comments