From 9b70444ec0281e2542dc73b63d3bda30c523907f Mon Sep 17 00:00:00 2001 From: Erhan Date: Thu, 12 Oct 2023 10:38:47 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20=20[#26]=20Added=20?= =?UTF-8?q?user=20to=20the=20Customer=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/migrations/0006_customer_user.py | 21 +++++++++++++++++++ src/bobvance/base/models.py | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 src/bobvance/base/migrations/0006_customer_user.py diff --git a/src/bobvance/base/migrations/0006_customer_user.py b/src/bobvance/base/migrations/0006_customer_user.py new file mode 100644 index 0000000..4186f10 --- /dev/null +++ b/src/bobvance/base/migrations/0006_customer_user.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.21 on 2023-10-12 08:23 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('base', '0005_order_total_price'), + ] + + operations = [ + migrations.AddField( + model_name='customer', + name='user', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/bobvance/base/models.py b/src/bobvance/base/models.py index 1d8e62a..7d29803 100644 --- a/src/bobvance/base/models.py +++ b/src/bobvance/base/models.py @@ -6,9 +6,11 @@ from bobvance.base.choices import OrderStatusChoices +from bobvance.accounts.models import User # Create your models here. class Customer(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True) firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=50) email = models.EmailField() From 542ea73a49c9ee6b24b313c88ee06b036b5b4891 Mon Sep 17 00:00:00 2001 From: Erhan Date: Fri, 16 Feb 2024 14:29:16 +0100 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8=20[#26]=20Added=20login=20app=20&?= =?UTF-8?q?=20added=20urls=20for=20the=20authentication=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bobvance/login/__init__.py | 0 src/bobvance/login/admin.py | 3 ++ src/bobvance/login/apps.py | 6 +++ src/bobvance/login/migrations/__init__.py | 0 src/bobvance/login/models.py | 3 ++ src/bobvance/login/tests.py | 3 ++ src/bobvance/login/urls.py | 11 ++++++ src/bobvance/login/views.py | 3 ++ .../templates/registration/login.html | 38 +++++++++++++++++++ src/bobvance/urls.py | 1 + 10 files changed, 68 insertions(+) create mode 100644 src/bobvance/login/__init__.py create mode 100644 src/bobvance/login/admin.py create mode 100644 src/bobvance/login/apps.py create mode 100644 src/bobvance/login/migrations/__init__.py create mode 100644 src/bobvance/login/models.py create mode 100644 src/bobvance/login/tests.py create mode 100644 src/bobvance/login/urls.py create mode 100644 src/bobvance/login/views.py create mode 100644 src/bobvance/templates/registration/login.html diff --git a/src/bobvance/login/__init__.py b/src/bobvance/login/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/bobvance/login/admin.py b/src/bobvance/login/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/src/bobvance/login/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/src/bobvance/login/apps.py b/src/bobvance/login/apps.py new file mode 100644 index 0000000..ebd58e7 --- /dev/null +++ b/src/bobvance/login/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LoginConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'login' diff --git a/src/bobvance/login/migrations/__init__.py b/src/bobvance/login/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/bobvance/login/models.py b/src/bobvance/login/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/src/bobvance/login/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/src/bobvance/login/tests.py b/src/bobvance/login/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/bobvance/login/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/bobvance/login/urls.py b/src/bobvance/login/urls.py new file mode 100644 index 0000000..1046c5a --- /dev/null +++ b/src/bobvance/login/urls.py @@ -0,0 +1,11 @@ +from django.urls import path + +from django.contrib.auth import views as auth_views + +urlpatterns = [ + path('login/', auth_views.LoginView.as_view(), name='login'), + path('logout/', auth_views.LogoutView.as_view(), name='logout'), + path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'), + path('reset///', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), + path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'), +] diff --git a/src/bobvance/login/views.py b/src/bobvance/login/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/src/bobvance/login/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/src/bobvance/templates/registration/login.html b/src/bobvance/templates/registration/login.html new file mode 100644 index 0000000..8dddf70 --- /dev/null +++ b/src/bobvance/templates/registration/login.html @@ -0,0 +1,38 @@ +{% extends "master.html" %} + +{% block content %} + +{% if form.errors %} +

Your username and password didn't match. Please try again.

+{% endif %} + +{% if next %} + {% if user.is_authenticated %} +

Your account doesn't have access to this page. To proceed, + please login with an account that has access.

+ {% else %} +

Please login to see this page.

+ {% endif %} +{% endif %} + +
+{% csrf_token %} + + + + + + + + + +
{{ form.username.label_tag }}{{ form.username }}
{{ form.password.label_tag }}{{ form.password }}
+ + + +
+ +{# Assumes you set up the password_reset view in your URLconf #} +

Lost password?

+ +{% endblock %} diff --git a/src/bobvance/urls.py b/src/bobvance/urls.py index 69aaac0..4b1cbc2 100644 --- a/src/bobvance/urls.py +++ b/src/bobvance/urls.py @@ -39,6 +39,7 @@ ), path("", include("bobvance.base.urls")), path("", include("bobvance.contact.urls")), + path("", include("bobvance.login.urls")), ] # NOTE: The staticfiles_urlpatterns also discovers static files (ie. no need to run collectstatic). Both the static From f3cbaa26b5f0c3bd12fdd575fcfb0f4f8b11b9f1 Mon Sep 17 00:00:00 2001 From: Erhan Date: Fri, 16 Feb 2024 15:18:35 +0100 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=92=84=20[#26]=20Added=20templates=20?= =?UTF-8?q?for=20the=20authentication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bobvance/login/urls.py | 6 +++--- .../registration/password_reset.html | 19 +++++++++++++++++++ .../password_reset_confirmation.html | 15 +++++++++++++++ .../registration/password_reset_done.html | 11 +++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/bobvance/templates/registration/password_reset.html create mode 100644 src/bobvance/templates/registration/password_reset_confirmation.html create mode 100644 src/bobvance/templates/registration/password_reset_done.html diff --git a/src/bobvance/login/urls.py b/src/bobvance/login/urls.py index 1046c5a..5d18013 100644 --- a/src/bobvance/login/urls.py +++ b/src/bobvance/login/urls.py @@ -5,7 +5,7 @@ urlpatterns = [ path('login/', auth_views.LoginView.as_view(), name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), - path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'), - path('reset///', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), - path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'), + path('password_reset/', auth_views.PasswordResetView.as_view(template_name='registration/password_reset.html'), name='password_reset'), + path('reset///', auth_views.PasswordResetConfirmView.as_view(template_name='registration/password_reset_confirm.html'), name='password_reset_confirm'), + path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='registration/password_reset_done.html'), name='password_reset_done'), ] diff --git a/src/bobvance/templates/registration/password_reset.html b/src/bobvance/templates/registration/password_reset.html new file mode 100644 index 0000000..e065211 --- /dev/null +++ b/src/bobvance/templates/registration/password_reset.html @@ -0,0 +1,19 @@ +{% extends "master.html" %} + +{% block content %} + +{% if form.errors %} +

There was an error with the submitted form. Please correct the errors and try again.

+{% endif %} + +

Password Reset

+ +
+ {% csrf_token %} + {{ form.as_p }} + +
+ +

Remembered your password? Log in

+ +{% endblock %} diff --git a/src/bobvance/templates/registration/password_reset_confirmation.html b/src/bobvance/templates/registration/password_reset_confirmation.html new file mode 100644 index 0000000..f3dc027 --- /dev/null +++ b/src/bobvance/templates/registration/password_reset_confirmation.html @@ -0,0 +1,15 @@ +{% extends "master.html" %} + +{% block content %} + +{% if valid %} +

Password Reset Successful

+

Your password has been successfully reset.

+

Log in

+{% else %} +

Password Reset Failed

+

The password reset link is no longer valid. Please request a new one.

+

Request a new password reset

+{% endif %} + +{% endblock %} diff --git a/src/bobvance/templates/registration/password_reset_done.html b/src/bobvance/templates/registration/password_reset_done.html new file mode 100644 index 0000000..08d1fe7 --- /dev/null +++ b/src/bobvance/templates/registration/password_reset_done.html @@ -0,0 +1,11 @@ +{% extends "master.html" %} + +{% block content %} + +

Password Reset Email Sent

+

We've sent you an email with instructions on how to reset your password. + If you don't receive an email within a few minutes, check your spam folder.

+ +

Return to login page

+ +{% endblock %}