From a70c1e148b28e988b1f85fa998c151f14e2ab6cb Mon Sep 17 00:00:00 2001 From: slandath Date: Fri, 29 Aug 2025 22:11:42 -0400 Subject: [PATCH 1/2] created login template, view, and form Signed-off-by: slandath --- accounts/forms.py | 24 +++++++++++++++ accounts/templates/login.html | 56 +++++++++++++++++++++++++++++++++++ accounts/urls.py | 3 ++ accounts/views.py | 13 +++++++- fables/settings.py | 3 ++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 accounts/templates/login.html diff --git a/accounts/forms.py b/accounts/forms.py index bd59f15..b093b3e 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.contrib.auth.forms import AuthenticationForm class CreateAccountForm(forms.Form): @@ -32,3 +33,26 @@ class CreateAccountForm(forms.Form): def clean(self): cleaned_data = super().clean() return cleaned_data + + +class EmailAuthenticationForm(AuthenticationForm): + username = forms.EmailField( + label="Email", + widget=forms.EmailInput( + attrs={ + "id": "email", + "class": "form-control", + } + ), + ) + + password = forms.CharField( + label="Password", + strip=False, + widget=forms.PasswordInput( + attrs={ + "id": "password", + "class": "form-control", + } + ), + ) diff --git a/accounts/templates/login.html b/accounts/templates/login.html new file mode 100644 index 0000000..6492bf1 --- /dev/null +++ b/accounts/templates/login.html @@ -0,0 +1,56 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}Login - Fables{% endblock %} + +{% block content %} +

Login

+ +
+
+ {% csrf_token %} +
+ + {{ form.username }} + {% if form.username.errors %} +
+ {% for error in form.username.errors %} +
{{ error }}
+ {% endfor %} +
+ {% endif %} +
+
+ + {{ form.password }} + {% if form.password.errors %} +
+ {% for error in form.password.errors %} +
{{ error }}
+ {% endfor %} +
+ {% endif %} +
+ + {% if form.non_field_errors %} +
+ {% for error in form.non_field_errors %} +
{{ error }}
+ {% endfor %} +
+ {% endif %} + +
+ +
+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/accounts/urls.py b/accounts/urls.py index 4952d82..928ea28 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -3,8 +3,11 @@ from home import views as home_views from . import views +from .views import CustomLoginView, CustomLogoutView urlpatterns = [ path("", home_views.home, name="home"), path("create/", views.create_account, name="create_account"), + path("login/", CustomLoginView.as_view(), name="login"), + path("logout/", CustomLogoutView.as_view(), name="logout"), ] diff --git a/accounts/views.py b/accounts/views.py index 399d268..c4c7f50 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -1,9 +1,10 @@ import logging from django.contrib import messages +from django.contrib.auth.views import LoginView, LogoutView from django.shortcuts import redirect, render -from .forms import CreateAccountForm +from .forms import CreateAccountForm, EmailAuthenticationForm from .models import Account logger = logging.getLogger(__name__) @@ -43,3 +44,13 @@ def create_account(request): logger.debug("Rendering create account form (GET request)") return render(request, "create_account.html", {"form": form}) + + +class CustomLoginView(LoginView): + template_name = "login.html" + authentication_form = EmailAuthenticationForm + redirect_authenticated_user = True + + +class CustomLogoutView(LogoutView): + next_page = "/" diff --git a/fables/settings.py b/fables/settings.py index 99a45de..709382a 100644 --- a/fables/settings.py +++ b/fables/settings.py @@ -92,6 +92,9 @@ # User Model AUTH_USER_MODEL = "accounts.Account" +LOGIN_REDIRECT_URL = "/" +LOGOUT_REDIRECT_URL = "/" +LOGIN_URL = "/accounts/login" # Password validation # https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators From b3df99ca5a69b91562a9aff6059e3ef6a6420b64 Mon Sep 17 00:00:00 2001 From: slandath Date: Fri, 29 Aug 2025 22:35:17 -0400 Subject: [PATCH 2/2] login working Signed-off-by: slandath --- accounts/urls.py | 3 --- home/templates/base.html | 24 +++++++++++++++++++++--- home/views.py | 2 ++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/accounts/urls.py b/accounts/urls.py index 928ea28..f362340 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -1,12 +1,9 @@ from django.urls import path -from home import views as home_views - from . import views from .views import CustomLoginView, CustomLogoutView urlpatterns = [ - path("", home_views.home, name="home"), path("create/", views.create_account, name="create_account"), path("login/", CustomLoginView.as_view(), name="login"), path("logout/", CustomLogoutView.as_view(), name="logout"), diff --git a/home/templates/base.html b/home/templates/base.html index f196005..e039a33 100644 --- a/home/templates/base.html +++ b/home/templates/base.html @@ -15,6 +15,7 @@ diff --git a/home/views.py b/home/views.py index 73e7ec4..4b6ef3c 100644 --- a/home/views.py +++ b/home/views.py @@ -1,5 +1,7 @@ +from django.contrib.auth.decorators import login_required from django.shortcuts import render +@login_required def home(request): return render(request, "home.html")