CrimsonREwind commited on
Commit
082b552
·
verified ·
1 Parent(s): 4d39f31

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +1 -62
main.py CHANGED
@@ -15,68 +15,11 @@ app = Flask(__name__)
15
  app.secret_key = os.getenv("SECRET_KEY")
16
  bcrypt = Bcrypt(app)
17
 
18
- SUPABASE_URL = os.getenv("URL")
19
- SUPABASE_KEY = os.getenv("KEY")
20
 
21
- supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
22
 
23
  movies = pd.read_csv('core/data/processed_movies_with_posters.csv')
24
  cosine_sim = joblib.load('core/model/cosine_sim.pkl')
25
 
26
- def login_required(f):
27
- @wraps(f)
28
- def decorated_function(*args, **kwargs):
29
- if 'logged_in' not in session:
30
- flash('Please log in to access this page.', 'warning')
31
- return redirect(url_for('login'))
32
- return f(*args, **kwargs)
33
- return decorated_function
34
-
35
- @app.route('/login', methods=['GET', 'POST'])
36
- def login():
37
- if request.method == 'POST':
38
- username = request.form['username']
39
- password = request.form['password']
40
-
41
- response = supabase.table('users').select('*').eq('username', username).execute()
42
- if response.data:
43
- user = response.data[0]
44
- if bcrypt.check_password_hash(user['password'], password):
45
- session['logged_in'] = True
46
- session['username'] = username
47
- return redirect(url_for('home'))
48
-
49
- flash('Invalid username or password.', 'warning')
50
-
51
- return render_template('login.html')
52
-
53
- @app.route('/register', methods=['GET', 'POST'])
54
- def register():
55
- if request.method == 'POST':
56
- username = request.form['username']
57
- password = bcrypt.generate_password_hash(request.form['password']).decode('utf-8')
58
-
59
- try:
60
- response = supabase.table('users').insert({"username": username, "password": password}).execute()
61
- if not response.data:
62
- flash('Username already exists. Please choose a different one.', 'warning')
63
- else:
64
- flash('Registration successful! You can now log in.', 'success')
65
- return redirect(url_for('login'))
66
- except Exception as e:
67
- if "duplicate key value violates unique constraint" in str(e):
68
- flash(f"Username already exits", 'warning')
69
- else:
70
- flash(f"An error occurred: {str(e)}", 'warning')
71
-
72
- return render_template('register.html')
73
-
74
- @app.route('/logout')
75
- @login_required
76
- def logout():
77
- session.clear()
78
- flash('You have been logged out.', 'info')
79
- return redirect(url_for('login'))
80
 
81
 
82
  def get_recommendations(title, cosine_sim=cosine_sim):
@@ -100,19 +43,17 @@ def get_recommendations_by_id(movie_id, cosine_sim=cosine_sim):
100
  return movies.iloc[movie_indices]
101
 
102
  @app.route('/')
103
- @login_required
104
  def home():
105
  return render_template('recommendation.html', movies=movies.sample(20).to_dict(orient='records'))
106
 
107
  @app.route('/movie/<int:id>')
108
- @login_required
109
  def movie_details(id):
110
  movie = movies[movies['id'] == id].iloc[0]
111
  recommendations = get_recommendations_by_id(id).to_dict(orient='records')
112
  return render_template('movie_details.html', movie=movie, recommendations=recommendations)
113
 
114
  @app.route('/recommend', methods=['POST'])
115
- @login_required
116
  def recommend():
117
  title = request.form['title']
118
  recommendations, close_matches = get_recommendations(title)
@@ -122,7 +63,6 @@ def recommend():
122
  return render_template('recommendation.html', movies=recommendations.to_dict(orient='records'))
123
 
124
  @app.route('/search', methods=['GET', 'POST'])
125
- @login_required
126
  def search():
127
  if request.method == 'POST':
128
  query = request.form['query']
@@ -131,7 +71,6 @@ def search():
131
  return render_template('search.html', movies=None)
132
 
133
  @app.route('/filter', methods=['GET', 'POST'])
134
- @login_required
135
  def filter():
136
  genres = sorted(movies['genre'].str.split(',', expand=True).stack().dropna().unique())
137
  languages = sorted(movies['original_language'].dropna().unique())
 
15
  app.secret_key = os.getenv("SECRET_KEY")
16
  bcrypt = Bcrypt(app)
17
 
 
 
18
 
 
19
 
20
  movies = pd.read_csv('core/data/processed_movies_with_posters.csv')
21
  cosine_sim = joblib.load('core/model/cosine_sim.pkl')
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
 
25
  def get_recommendations(title, cosine_sim=cosine_sim):
 
43
  return movies.iloc[movie_indices]
44
 
45
  @app.route('/')
46
+
47
  def home():
48
  return render_template('recommendation.html', movies=movies.sample(20).to_dict(orient='records'))
49
 
50
  @app.route('/movie/<int:id>')
 
51
  def movie_details(id):
52
  movie = movies[movies['id'] == id].iloc[0]
53
  recommendations = get_recommendations_by_id(id).to_dict(orient='records')
54
  return render_template('movie_details.html', movie=movie, recommendations=recommendations)
55
 
56
  @app.route('/recommend', methods=['POST'])
 
57
  def recommend():
58
  title = request.form['title']
59
  recommendations, close_matches = get_recommendations(title)
 
63
  return render_template('recommendation.html', movies=recommendations.to_dict(orient='records'))
64
 
65
  @app.route('/search', methods=['GET', 'POST'])
 
66
  def search():
67
  if request.method == 'POST':
68
  query = request.form['query']
 
71
  return render_template('search.html', movies=None)
72
 
73
  @app.route('/filter', methods=['GET', 'POST'])
 
74
  def filter():
75
  genres = sorted(movies['genre'].str.split(',', expand=True).stack().dropna().unique())
76
  languages = sorted(movies['original_language'].dropna().unique())