From ceb264b6bdfed8c51e54deed2b6132fecff3934d Mon Sep 17 00:00:00 2001
From: Karan Jayachandra
Date: Sun, 6 Jul 2025 15:13:27 +0200
Subject: Added the basic login
---
app/__init__.py | 2 ++
app/config.py | 4 ++++
app/forms.py | 9 +++++++++
app/routes.py | 10 +++++++++-
app/templates/index.j2 | 9 +++++++++
app/templates/login.j2 | 25 +++++++++++++++++++++++++
6 files changed, 58 insertions(+), 1 deletion(-)
create mode 100644 app/config.py
create mode 100644 app/forms.py
create mode 100644 app/templates/login.j2
(limited to 'app')
diff --git a/app/__init__.py b/app/__init__.py
index 96c8ef5..7b0c03d 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -1,5 +1,7 @@
from flask import Flask
+from app.config import Config
app = Flask(__name__)
+app.config.from_object(Config)
from app import routes
diff --git a/app/config.py b/app/config.py
new file mode 100644
index 0000000..aeb2840
--- /dev/null
+++ b/app/config.py
@@ -0,0 +1,4 @@
+from os import environ
+
+class Config:
+ SECRET_KEY = environ.get("SECRET_KEY") or "you-will-never-guess"
\ No newline at end of file
diff --git a/app/forms.py b/app/forms.py
new file mode 100644
index 0000000..504824a
--- /dev/null
+++ b/app/forms.py
@@ -0,0 +1,9 @@
+from flask_wtf import FlaskForm
+from wtforms.validators import DataRequired
+from wtforms import StringField, PasswordField, BooleanField, SubmitField
+
+class LoginForm(FlaskForm):
+ username = StringField("Username", validators=[DataRequired()])
+ password = PasswordField("Password", validators=[DataRequired()])
+ remember_me = BooleanField("Remember Me")
+ submit = SubmitField("Sign In")
\ No newline at end of file
diff --git a/app/routes.py b/app/routes.py
index c18d93b..b943e16 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -1,6 +1,7 @@
from app import app
+from app.forms import LoginForm
from app.controller import RoundGenerator
-from flask import render_template, request, url_for, Response
+from flask import render_template, request, url_for, Response, flash, redirect
rg = RoundGenerator()
@@ -8,6 +9,13 @@ rg = RoundGenerator()
def home():
return render_template("index.j2", url_for=url_for)
+@app.route("/login", methods=["GET", "POST"])
+def login():
+ form = LoginForm()
+ if form.validate_on_submit():
+ flash(f"User {form.username} is requesting to login.")
+ return redirect("/")
+ return render_template("login.j2", form=form)
@app.route("/control", methods=["GET"])
def get_controls():
diff --git a/app/templates/index.j2 b/app/templates/index.j2
index ce0d531..656b187 100644
--- a/app/templates/index.j2
+++ b/app/templates/index.j2
@@ -7,6 +7,15 @@
{{ navbar(url_for) }}
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+
+ {% for message in messages %}
+ - {{ message }}
+ {% endfor %}
+
+ {% endif %}
+ {% endwith %}
{{ footer() }}
+
+ {{ navbar(url_for) }}
+ Sign In
+
+ {{ footer() }}
+
+
+