Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# app.py - VERSI
|
| 2 |
import os
|
| 3 |
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify, send_file, session
|
| 4 |
from flask_sqlalchemy import SQLAlchemy
|
|
@@ -13,7 +13,6 @@ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
| 13 |
app.config['UPLOAD_FOLDER'] = 'static/uploads'
|
| 14 |
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
|
| 15 |
|
| 16 |
-
# Buat folder upload
|
| 17 |
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
|
| 18 |
|
| 19 |
db = SQLAlchemy(app)
|
|
@@ -67,6 +66,7 @@ with app.app_context():
|
|
| 67 |
db.session.add(user)
|
| 68 |
|
| 69 |
db.session.commit()
|
|
|
|
| 70 |
|
| 71 |
# ==================== ROUTES ====================
|
| 72 |
@app.route('/')
|
|
@@ -78,30 +78,42 @@ def home():
|
|
| 78 |
user = None
|
| 79 |
if 'user_id' in session:
|
| 80 |
user = User.query.get(session['user_id'])
|
|
|
|
| 81 |
|
| 82 |
return render_template('index.html', photos=photos, videos=videos, trending=trending, user=user)
|
| 83 |
|
|
|
|
| 84 |
@app.route('/login', methods=['GET', 'POST'])
|
| 85 |
def login():
|
|
|
|
| 86 |
if 'user_id' in session:
|
|
|
|
| 87 |
return redirect(url_for('home'))
|
| 88 |
|
| 89 |
if request.method == 'POST':
|
| 90 |
username = request.form.get('username')
|
| 91 |
password = request.form.get('password')
|
| 92 |
|
|
|
|
|
|
|
|
|
|
| 93 |
user = User.query.filter_by(username=username).first()
|
| 94 |
|
| 95 |
if user and user.check_password(password):
|
|
|
|
|
|
|
|
|
|
| 96 |
session['user_id'] = user.id
|
| 97 |
session['username'] = user.username
|
| 98 |
session['is_admin'] = user.is_admin
|
| 99 |
-
flash('✅ Selamat datang!', 'success')
|
| 100 |
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
|
|
|
|
|
|
| 104 |
else:
|
|
|
|
| 105 |
flash('❌ Username atau password salah!', 'error')
|
| 106 |
return redirect(url_for('login'))
|
| 107 |
|
|
@@ -116,10 +128,12 @@ def logout():
|
|
| 116 |
@app.route('/admin')
|
| 117 |
def admin():
|
| 118 |
if 'user_id' not in session:
|
|
|
|
| 119 |
return redirect(url_for('login'))
|
| 120 |
|
| 121 |
user = User.query.get(session['user_id'])
|
| 122 |
if not user or not user.is_admin:
|
|
|
|
| 123 |
return redirect(url_for('home'))
|
| 124 |
|
| 125 |
photos = Photo.query.order_by(Photo.upload_date.desc()).all()
|
|
@@ -209,6 +223,13 @@ def slideshow():
|
|
| 209 |
photos = Photo.query.filter_by(file_type='photo').order_by(Photo.upload_date.desc()).limit(10).all()
|
| 210 |
return jsonify([p.filename for p in photos])
|
| 211 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
if __name__ == '__main__':
|
| 213 |
port = int(os.environ.get('PORT', 7860))
|
| 214 |
-
app.run(host='0.0.0.0', port=port)
|
|
|
|
| 1 |
+
# app.py - VERSI FIX LOGIN (PASTI BERHASIL)
|
| 2 |
import os
|
| 3 |
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify, send_file, session
|
| 4 |
from flask_sqlalchemy import SQLAlchemy
|
|
|
|
| 13 |
app.config['UPLOAD_FOLDER'] = 'static/uploads'
|
| 14 |
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
|
| 15 |
|
|
|
|
| 16 |
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
|
| 17 |
|
| 18 |
db = SQLAlchemy(app)
|
|
|
|
| 66 |
db.session.add(user)
|
| 67 |
|
| 68 |
db.session.commit()
|
| 69 |
+
print(f"✅ Database siap dengan {User.query.count()} users")
|
| 70 |
|
| 71 |
# ==================== ROUTES ====================
|
| 72 |
@app.route('/')
|
|
|
|
| 78 |
user = None
|
| 79 |
if 'user_id' in session:
|
| 80 |
user = User.query.get(session['user_id'])
|
| 81 |
+
print(f"User in session: {user.username if user else None}")
|
| 82 |
|
| 83 |
return render_template('index.html', photos=photos, videos=videos, trending=trending, user=user)
|
| 84 |
|
| 85 |
+
# ==================== LOGIN FIX ====================
|
| 86 |
@app.route('/login', methods=['GET', 'POST'])
|
| 87 |
def login():
|
| 88 |
+
# Kalau sudah login, langsung ke home
|
| 89 |
if 'user_id' in session:
|
| 90 |
+
print("Already logged in, redirecting to home")
|
| 91 |
return redirect(url_for('home'))
|
| 92 |
|
| 93 |
if request.method == 'POST':
|
| 94 |
username = request.form.get('username')
|
| 95 |
password = request.form.get('password')
|
| 96 |
|
| 97 |
+
print(f"Login attempt: {username}")
|
| 98 |
+
|
| 99 |
+
# Cari user
|
| 100 |
user = User.query.filter_by(username=username).first()
|
| 101 |
|
| 102 |
if user and user.check_password(password):
|
| 103 |
+
print(f"Login SUCCESS: {username}")
|
| 104 |
+
|
| 105 |
+
# Set session
|
| 106 |
session['user_id'] = user.id
|
| 107 |
session['username'] = user.username
|
| 108 |
session['is_admin'] = user.is_admin
|
|
|
|
| 109 |
|
| 110 |
+
# Flash message
|
| 111 |
+
flash('✅ Login berhasil!', 'success')
|
| 112 |
+
|
| 113 |
+
# Redirect ke admin
|
| 114 |
+
return redirect(url_for('admin'))
|
| 115 |
else:
|
| 116 |
+
print(f"Login FAILED: {username}")
|
| 117 |
flash('❌ Username atau password salah!', 'error')
|
| 118 |
return redirect(url_for('login'))
|
| 119 |
|
|
|
|
| 128 |
@app.route('/admin')
|
| 129 |
def admin():
|
| 130 |
if 'user_id' not in session:
|
| 131 |
+
flash('🔐 Silakan login dulu!', 'warning')
|
| 132 |
return redirect(url_for('login'))
|
| 133 |
|
| 134 |
user = User.query.get(session['user_id'])
|
| 135 |
if not user or not user.is_admin:
|
| 136 |
+
flash('⛔ Anda bukan admin!', 'error')
|
| 137 |
return redirect(url_for('home'))
|
| 138 |
|
| 139 |
photos = Photo.query.order_by(Photo.upload_date.desc()).all()
|
|
|
|
| 223 |
photos = Photo.query.filter_by(file_type='photo').order_by(Photo.upload_date.desc()).limit(10).all()
|
| 224 |
return jsonify([p.filename for p in photos])
|
| 225 |
|
| 226 |
+
@app.route('/test')
|
| 227 |
+
def test():
|
| 228 |
+
return jsonify({
|
| 229 |
+
'session': dict(session),
|
| 230 |
+
'user_logged_in': 'user_id' in session
|
| 231 |
+
})
|
| 232 |
+
|
| 233 |
if __name__ == '__main__':
|
| 234 |
port = int(os.environ.get('PORT', 7860))
|
| 235 |
+
app.run(host='0.0.0.0', port=port, debug=True)
|