diff --git a/refundom/refundom/settings.py b/refundom/refundom/settings.py index 5b607bf..2e42bb3 100644 --- a/refundom/refundom/settings.py +++ b/refundom/refundom/settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'phonenumber_field', ] MIDDLEWARE = [ @@ -129,3 +130,14 @@ STATICFILES_DIRS = (os.path.join(APP_DIR, 'static'),APP_DIR) # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# Recapcha Stuff +RECAPTCHA_PUBLIC_KEY = '6LdXRbopAAAAAL9NT7C2J3Fuu_b6rvhhsPyxTd9Z' +RECAPTCHA_PRIVATE_KEY = '6LdXRbopAAAAAPt31zdQJaOwLseognmZHZEHmWlt' + +# SMTP2GO +EMAIL_HOST = 'mail.smtp2go.com' +EMAIL_HOST_USER = 'info.aimloperations.com' +EMAIL_HOST_PASSWORD = 'ZDErIII2sipNNVMz' +EMAIL_PORT = 2525 +EMAIL_USE_TLS = True \ No newline at end of file diff --git a/refundom/webpage/admin.py b/refundom/webpage/admin.py index 8c38f3f..12eb589 100644 --- a/refundom/webpage/admin.py +++ b/refundom/webpage/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin +from .models import Contact # Register your models here. +@admin.register(Contact, site=admin.site) +class ContactAdmin(admin.ModelAdmin): + list_display = ("email", "name", "contacted") + list_filter = ("email", "name", "contacted") + search_fields = ("email", "name") \ No newline at end of file diff --git a/refundom/webpage/apps.py b/refundom/webpage/apps.py index 2de9185..9f522dd 100644 --- a/refundom/webpage/apps.py +++ b/refundom/webpage/apps.py @@ -2,5 +2,5 @@ from django.apps import AppConfig class WebpageConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'webpage' + default_auto_field = "django.db.models.BigAutoField" + name = "webpage" diff --git a/refundom/webpage/forms.py b/refundom/webpage/forms.py new file mode 100644 index 0000000..750d50c --- /dev/null +++ b/refundom/webpage/forms.py @@ -0,0 +1,16 @@ +from django import forms +from django_recaptcha.fields import ReCaptchaField +from django_recaptcha.widgets import ReCaptchaV3 +from django.conf import settings + + +class FormWithCaptcha(forms.Form): + captcha = ReCaptchaField( + widget=ReCaptchaV3( + attrs={ + "required_score": 0.85, + } + ), + public_key=settings.RECAPTCHA_PUBLIC_KEY, + private_key=settings.RECAPTCHA_PRIVATE_KEY, + ) diff --git a/refundom/webpage/migrations/0001_initial.py b/refundom/webpage/migrations/0001_initial.py new file mode 100644 index 0000000..5ced293 --- /dev/null +++ b/refundom/webpage/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# Generated by Django 5.0 on 2025-03-25 01:32 + +import django.utils.timezone +import phonenumber_field.modelfields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Contact", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created", models.DateTimeField(default=django.utils.timezone.now)), + ( + "last_modified", + models.DateTimeField(default=django.utils.timezone.now), + ), + ("email", models.EmailField(max_length=128)), + ("name", models.CharField(max_length=128)), + ("contacted", models.BooleanField(default=False)), + ( + "phone_number", + phonenumber_field.modelfields.PhoneNumberField( + max_length=128, region=None + ), + ), + ("street", models.CharField(max_length=128)), + ("zip_code", models.CharField(max_length=9)), + ("state", models.CharField(max_length=25)), + ("city", models.CharField(max_length=128)), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/refundom/webpage/models.py b/refundom/webpage/models.py index 71a8362..b6a6573 100644 --- a/refundom/webpage/models.py +++ b/refundom/webpage/models.py @@ -1,3 +1,34 @@ from django.db import models # Create your models here. + +from django.utils import timezone +from phonenumber_field.modelfields import PhoneNumberField + +class TimeInfoBase(models.Model): + + created = models.DateTimeField(default=timezone.now) + last_modified = models.DateTimeField(default=timezone.now) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + if not kwargs.pop("skip_last_modified", False) and not hasattr(self, "skip_last_modified"): + self.last_modified = timezone.now() + if kwargs.get("update_fields") is not None: + kwargs["update_fields"] = list({*kwargs["update_fields"], "last_modified"}) + + super().save(*args, **kwargs) + +# Create your models here. +class Contact(TimeInfoBase): + email = models.EmailField(max_length=128) + name = models.CharField(max_length=128) + contacted = models.BooleanField(default=False) + phone_number = PhoneNumberField() + + street = models.CharField(max_length=128) + zip_code = models.CharField(max_length=9) + state = models.CharField(max_length=25) + city = models.CharField(max_length=128) \ No newline at end of file diff --git a/refundom/webpage/templates/webpage/contact.html b/refundom/webpage/templates/webpage/contact.html index b08bed9..43be9d7 100644 --- a/refundom/webpage/templates/webpage/contact.html +++ b/refundom/webpage/templates/webpage/contact.html @@ -13,24 +13,105 @@