Each user (when logged in) can rate movies simply by clicking on the rate value (1 to 5) at the side of the movie title in the movies' results page (see preceding screenshot). This action will trigger the rate_movie
function in the views.py
file (through the corresponding URL in urls.py
):
def rate_movie(request): data = request.GET rate = data.get("vote") movies,moviesindxs = zip(*literal_eval(data.get("movies"))) movie = data.get("movie") movieindx = int(data.get("movieindx")) #save movie rate userprofile = None if request.user.is_superuser: return render_to_response( 'books_recsys_app/superusersignin.html', RequestContext(request)) elif request.user.is_authenticated() : userprofile = UserProfile.objects.get(user=request.user) else: return render_to_response( 'books_recsys_app/pleasesignin.html', RequestContext(request)) if MovieRated.objects.filter(movie=movie).filter(user=userprofile).exists(): mr = MovieRated.objects.get(movie=movie,user=userprofile) mr.value = int(rate) mr.save() else: mr = MovieRated() mr.user = userprofile mr.value = int(rate) mr.movie = movie mr.movieindx = movieindx mr.save() userprofile.save() #get back the remaining movies movies = RemoveFromList(movies,movie) moviesindxs = RemoveFromList(moviesindxs,movieindx) print movies context = {} context["movies"] = zip(movies,moviesindxs) context["rates"] = [1,2,3,4,5] return render_to_response( 'books_recsys_app/query_results.html', RequestContext(request, context))
The function will store the rate
of the movie in an object of the MovieRated
model, and the corresponding movies rate
vector of the user is updated (through the userprofile.save()
). The movies not rated are then sent back to the page query_results.html
. Note that the user needs to be logged in to rate a movie or the exception event that will ask the user to sign in will be shown (page: pleasesignin.html
).
18.225.234.24