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 %} + + {% endif %} + {% endwith %} {{ footer() }} diff --git a/app/templates/login.j2 b/app/templates/login.j2 new file mode 100644 index 0000000..fe898cb --- /dev/null +++ b/app/templates/login.j2 @@ -0,0 +1,25 @@ +{% from "macros.j2" import header, footer, navbar %} + + + {{ header(url_for) }} + +
+ {{ navbar(url_for) }} +

Sign In

+
+ {{ form.hidden_tag() }} +

+ {{ form.username.label }}
+ {{ form.username(size=32) }} +

+

+ {{ form.password.label }}
+ {{ form.password(size=32) }} +

+

{{ form.remember_me() }} {{ form.remember_me.label }}

+

{{ form.submit() }}

+
+ {{ footer() }} +
+ + -- cgit v1.3.1