flask-mongo / app.py
Rahul23232's picture
Update app.py
f50ce8c verified
from flask import Flask, render_template, request, redirect, url_for, flash, session, make_response
from datetime import datetime, timedelta
from pymongo import MongoClient
from bson.objectid import ObjectId
import pytz
import os
from werkzeug.security import generate_password_hash, check_password_hash
from dotenv import load_dotenv # For hiding Secrets
# Load environment variables from .env
load_dotenv()
app = Flask(__name__)
app.secret_key = os.getenv("SECRET_KEY") # Secret key from .env # Required for flash and sessions
# MongoDB connection
# MongoDB connection from .env
MONGO_URI = os.getenv("MONGO_URI")
client = MongoClient(MONGO_URI)
# Database and Collection setup
db = client.login_app
users = db.login # Collection name
# Home Page - index page
@app.route('/')
def index():
if 'user' in session:
return render_template("index.html", username=session['user'])
return redirect(url_for('login'))
# Signup Page
@app.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
username = request.form['username'].strip()
password = request.form['password'].strip()
if users.find_one({'username': username}):
flash("Username already exists!", "danger")
return redirect(url_for('signup'))
hashed_pw = generate_password_hash(password)
users.insert_one({'username': username, 'password': hashed_pw})
flash("Signup successful! Please login.", "success")
return redirect(url_for('login'))
return render_template('signup.html')
# Login Page
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username'].strip()
password = request.form['password'].strip()
remember = request.form.get('remember')
user = users.find_one({'username': username})
if user and check_password_hash(user['password'], password):
session['user'] = username
# If "Remember Me" is checked, set cookie
resp = make_response(redirect(url_for('index')))
if remember:
resp.set_cookie('remember_token', username, max_age=60*60*24*7) # 7 days
return resp
else:
flash("Invalid username or password!", "danger")
return redirect(url_for('login'))
# Auto login using remember me cookie
remember_token = request.cookies.get('remember_token')
if remember_token and users.find_one({'username': remember_token}):
session['user'] = remember_token
return redirect(url_for('index'))
return render_template('login.html')
# Logout
@app.route('/logout')
def logout():
session.pop('user', None)
resp = make_response(redirect(url_for('login')))
resp.set_cookie('remember_token', '', expires=0) # Clear cookie
flash("You have been logged out.", "info")
return resp
if __name__ == "__main__":
app.run(debug=True)