Compare commits

...

2 commits

Author SHA1 Message Date
Patsy
caddbb695c Phase 7: templates 2026-07-20 20:26:26 +02:00
Patsy
e04ce89f61 Phase 6: main blueprint 2026-07-20 20:24:22 +02:00
5 changed files with 105 additions and 0 deletions

View file

@ -0,0 +1,7 @@
from flask import Blueprint, render_template
main_bp = Blueprint("main", __name__)
@main_bp.route("/")
def index():
return render_template("index.html")

View file

@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block title %}Log In{% endblock %}
{% block content %}
<h2>Log In</h2>
<form method="POST" novalidate class="col-md-6">
{{ form.hidden_tag() }}
<div class="mb-3">
{{ form.email.label(class="form-label") }}
{{ form.email(class="form-control") }}
{% for error in form.email.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.password.label(class="form-label") }}
{{ form.password(class="form-control") }}
{% for error in form.password.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
<div class="form-check mb-3">
{{ form.remember_me(class="form-check-input") }}
{{ form.remember_me.label(class="form-check-label") }}
</div>
{{ form.submit(class="btn btn-primary") }}
</form>
{% endblock %}

View file

@ -0,0 +1,29 @@
{% extends "base.html" %}
{% block title %}Register{% endblock %}
{% block content %}
<h2>Create Account</h2>
<form method="POST" novalidate class="col-md-6">
{{ form.hidden_tag() }}
<div class="mb-3">
{{ form.username.label(class="form-label") }}
{{ form.username(class="form-control") }}
{% for error in form.username.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.email.label(class="form-label") }}
{{ form.email(class="form-control") }}
{% for error in form.email.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.password.label(class="form-label") }}
{{ form.password(class="form-control") }}
{% for error in form.password.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.confirm_password.label(class="form-label") }}
{{ form.confirm_password(class="form-control") }}
{% for error in form.confirm_password.errors %}<div class="text-danger small">{{ error }}</div>{% endfor %}
</div>
{{ form.submit(class="btn btn-primary") }}
</form>
{% endblock %}

View file

@ -0,0 +1,37 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}MyApp{% endblock %}</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="container">
<a class="navbar-brand" href="{{ url_for('main.index') }}">MyApp</a>
<div class="d-flex gap-2">
{% if current_user.is_authenticated %}
<span class="navbar-text">Hi, {{ current_user.username }}</span>
<a class="btn btn-outline-secondary btn-sm" href="{{ url_for('auth.logout') }}">Log out</a>
{% else %}
<a class="btn btn-outline-primary btn-sm" href="{{ url_for('auth.login') }}">Log in</a>
<a class="btn btn-primary btn-sm" href="{{ url_for('auth.register') }}">Register</a>
{% endif %}
</div>
</div>
</nav>
<div class="container">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</div>
</body>
</html>

View file

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<h1>Welcome{% if current_user.is_authenticated %}, {{ current_user.username }}{% endif %}!</h1>
{% if not current_user.is_authenticated %}
<p>Please <a href="{{ url_for('auth.login') }}">log in</a> or
<a href="{{ url_for('auth.register') }}">create an account</a>.</p>
{% endif %}
{% endblock %}