File size: 4,280 Bytes
82b43cd 6aab815 82b43cd fefb8e1 82b43cd 13450cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
# Initialize Flask app
app = Flask(__name__)
app.secret_key = 'your_super_secret_key'
# Database configuration
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
import sqlite3
from datetime import timedelta
# Flask App Setup
app = Flask(__name__)
# Secret key is used to sign session data (must be kept secret in real apps!)
app.secret_key = "supersecretkey"
# Permanent sessions last for 7 days (used when "Remember Me" is checked)
app.permanent_session_lifetime = timedelta(days=7)
# Helper function to connect to SQLite database
def get_db_connection():
# Connect to SQLite database (creates file users.db if it doesn’t exist)
conn = sqlite3.connect("users.db")
conn.row_factory = sqlite3.Row # Makes rows behave like dictionaries
return conn
# Initialize SQLAlchemy
db = SQLAlchemy(app)
# ---------------------
# Database Models
# ---------------------
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(200), nullable=False)
feedbacks = db.relationship('Feedback', backref='user', lazy=True)
class Feedback(db.Model):
id = db.Column(db.Integer, primary_key=True)
message = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
# ---------------------
# Routes
# ---------------------
@app.before_request
def create_tables():
db.create_all()
@app.route('/')
def home():
return redirect(url_for('register'))
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
existing_user = User.query.filter_by(username=username).first()
if existing_user:
flash('Username already exists. Please choose another.', 'danger')
else:
hashed_pw = generate_password_hash(password)
new_user = User(username=username, password=hashed_pw)
db.session.add(new_user)
db.session.commit()
flash('Registration successful! Please login.', 'success')
return redirect(url_for('login'))
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
session['user'] = user.username
flash('Logged in successfully!', 'success')
return redirect(url_for('welcome'))
else:
flash('Invalid credentials. Try again.', 'danger')
return render_template('login.html')
@app.route('/welcome')
def welcome():
if 'user' not in session:
flash('Please log in first.', 'warning')
return redirect(url_for('login'))
return render_template('welcome.html', username=session['user'])
@app.route('/feedback', methods=['GET', 'POST'])
def feedback():
if 'user' not in session:
flash('Please log in first.', 'warning')
return redirect(url_for('login'))
user = User.query.filter_by(username=session['user']).first()
if request.method == 'POST':
msg = request.form['message']
feedback_entry = Feedback(message=msg, user=user)
db.session.add(feedback_entry)
db.session.commit()
flash('Feedback received! Thank you.', 'success')
return render_template('feedback.html', message=msg)
return render_template('feedback.html', message=None)
@app.route('/logout')
def logout():
session.pop('user', None)
flash('Logged out successfully.', 'info')
return redirect(url_for('login'))
# ---------------------
# Run the app
# ---------------------
if __name__ == '__main__':
app.run(host="0.0.0.0", port=7860, debug=True)
|