def index(): form = PostForm() if form.validate_on_submit(): post = Post( body=form.post.data, timestamp=datetime.utcnow(), author=g.user, language=form.language(), ) db.session.add(post) db.session.commit() flash(gettext('Your post is now live!')) return redirect(url_for('index')) moviefeed = Movie.by_random().limit(app.config.get('MOVIES_PER_PAGE', 0)).all() try: moviepage = int(request.args.get('movies', 1)) except ValueError: moviepage = 1 movies = Movie.ordered(session.get('sort_by')).paginate( moviepage, app.config.get('BRIEF_MOVIES_PER_PAGE', 6), False) try: personpage = int(request.args.get('persons', 1)) except ValueError: personpage = 1 persons = Person.alphabet().paginate( personpage, app.config.get('BRIEF_PERSONS_PER_PAGE', 6), False) try: postpage = int(request.args.get('page', 1)) except ValueError: postpage = 1 if g.user.is_authenticated: q = g.user.followed_posts() else: q = Post.query posts = q.paginate(postpage, app.config.get('POSTS_PER_PAGE', 3), False) return render_template( "index.html", title="Home", movies=movies, persons=persons, posts=posts, form=form, moviefeed=moviefeed, )
def edit_movie(slug): movie = Movie.by_slug(slug=slug) if movie.user_id and g.user.id != movie.user_id: flash(gettext("Your can edit only your movies.")) return redirect(url_for('index')) form = MovieForm(obj=movie) impath = os.path.join(basedir, "static", "upload", form.image.data) if not os.path.isfile(impath): form.image.data = '' if form.validate_on_submit(): form.populate_obj(movie) movie.normalize(g.user.id) db.session.add(movie) movie.update_genres([genre.data for genre in form.genre_ids]) movie.update_directors( [director.data for director in form.director_ids]) db.session.commit() flash(gettext("Your changes have been saved.")) return redirect(url_for('view_movie', slug=movie.slug)) form.applyGenres(movie.genres) form.applyDirectors(movie.directors) print(form.errors) return render_template( 'movie/edit.html', form=form, slug=slug, )
def view_movie(slug): movie = Movie.by_slug(slug=slug) return render_template( 'movie/view.html', movie=movie, slug=slug, )
def movie_slug(): title = request.form.get('title') slug = Movie.make_slug(title) resp = { "title": title, "slug": slug, } return jsonify(resp)
def add_movie(): movie = Movie() form = MovieForm() if form.validate_on_submit(): form.populate_obj(movie) movie.normalize(g.user.id) db.session.add(movie) movie.update_genres([genre.data for genre in form.genre_ids]) movie.update_directors( [director.data for director in form.director_ids]) db.session.commit() flash(gettext("Your changes have been saved.")) return redirect(url_for('view_movie', slug=movie.slug)) return render_template( 'movie/edit.html', form=form, )
def register(): register_directors = db.session.query(Director).order_by('name') directors_list = [(i.id, i.name) for i in register_directors] form = MovieForm() #Movieクラスをインスタンス form.director.choices = directors_list #validate_on_submitメソッドはPOSTリクエスト(この場合register_movie.htmlへの入力)があるかどうか、また、有効なものかどうかを判定する if form.validate_on_submit(): movie = Movie(title=form.title.data, director_id=form.director.data, star=form.star.data, genre=form.genre.data, date=form.date.data, recommended=form.recommended.data, comment=form.comment.data) #movieオブジェクトをデータベースに追加 db.session.add(movie) #movieオブジェクトをデータベースに登録 db.session.commit() #index関数が発動するURLを取得し、移動 return redirect(url_for('movies.index')) return render_template('movies/register.html', form=form)
def view_genre(slug=None): try: page = int(request.args.get('movies', 1)) except ValueError: page = 1 if slug is None: genre = None else: genre = Genre.by_slug(slug) movies = Movie.by_genre(genre, order_by=session.get('sort_by')).paginate( page, app.config.get('BRIEF_MOVIES_PER_PAGE', 6), False) return render_template( 'genre/view.html', genre=genre, movies=movies, slug=slug, )
def import_yml(filename, user_id=None): import yaml data = dict() with open(filename, encoding="utf-8") as f: data = yaml.load(f) persons = Person.from_yml(data.get("persons", [])) for m in persons: db.session.add(m) genres = Genre.from_yml(data.get("genres", [])) for m in genres: db.session.add(m) movies = Movie.from_yml(data.get("movies", []), user_id) for m in movies: db.session.add(m) db.session.commit()
def parse_movie(slug): import wikiparser movie = Movie.by_slug(slug=slug) p = wikiparser.parse_wiki(movie.wikipage) # print("PARSED", p) # print("-"*80) # if p['page'] is not None: # print(p['page'].title) # else: # t = '' # for k, v in p['properties'].items(): # print("{}:\t{}\n".format(k, v)) # for k, v in p['movie'].items(): # print("M\t{}:\t{}".format(k, v)) return render_template( 'movie/wiki.html', movie=p['movie'], page=p['page'], props=p['properties'], slug=slug, )
def MyrecommendGenre(userid): ratings = pd.DataFrame(list(MovieRating.objects.filter(user_id = userid).values())) if ratings.empty: return [] ratings = ratings.sort_values(by=['rating']) mean = ratings['rating'].mean() if ratings.size > 0 else 0 movie_ids = ratings[ratings['rating']>=mean]['movie_id'] preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(movie_ids)]) movie_list=list(Movie.objects.filter(id__in = movie_ids).order_by(preserved)[:50]) genres = set() for movie in movie_list: genres.add(movie.genres) df=pd.DataFrame(list(Movie.objects.filter(genres__in = genres).exclude(id__in = ratings['movie_id']).values())) C = df.vote_average.mean() m = df.vote_count.quantile(0.90) q_movies = df.copy().loc[df.vote_count >= m] q_movies.shape def weighted_rating1(x, m=m, C=C): v = x['vote_count'] R = x['vote_average'] return (v/(v+m) * R) + (m/(m+v) * C) q_movies['score'] = q_movies.apply(weighted_rating1, axis=1) q_movies = q_movies.sort_values('score', ascending=False) q_movies = q_movies.head(100) return [Movie( id=record['id'], title=record['title'], genres=record['genres'], poster_path=record['poster_path'], production_companies=record['production_companies'], overview=record['overview'], vote_average=record['vote_average'], vote_count=record['vote_count'], ) for record in q_movies.to_dict('records')]
def GeneralRecommend(query): if query: return Movie.objects.filter( Q(title__icontains=query) | Q(overview__icontains=query)).distinct() movies = Movie.objects.all() df = pd.DataFrame(list(movies.values())) C = df.vote_average.mean() m = df.vote_count.quantile(0.90) q_movies = df.copy().loc[df.vote_count >= m] q_movies.shape def weighted_rating(x, m=m, C=C): v = x['vote_count'] R = x['vote_average'] return (v / (v + m) * R) + (m / (m + v) * C) q_movies['score'] = q_movies.apply(weighted_rating, axis=1) q_movies = q_movies.sort_values('score', ascending=False) q_movies = q_movies.head(100) movies = [ Movie( id=record['id'], title=record['title'], genres=record['genres'], poster_path=record['poster_path'], production_companies=record['production_companies'], overview=record['overview'], vote_average=record['vote_average'], vote_count=record['vote_count'], ) for record in q_movies.to_dict('records') ] return movies
def random_movie(): movie = Movie.by_random().first() if movie is None: return redirect(url_for('index')) return redirect(url_for('view_movie', slug=movie.slug))