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 @@
-
+ + {% csrf_token %}
- +
- +
- - + + +
+ +
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
- - + {% if capchaForm %} + {{ capchaForm }} + {% endif %}
- +
diff --git a/refundom/webpage/views.py b/refundom/webpage/views.py index a7e1ce6..7363ae8 100644 --- a/refundom/webpage/views.py +++ b/refundom/webpage/views.py @@ -1,35 +1,63 @@ from django.shortcuts import render +from django.conf import settings import requests +from .models import Contact +from .forms import FormWithCaptcha + # Create your views here. -def index(request): + +def index(request): return render(request, "webpage/index.html", {}) -def contact(request): + +def contact(request): if request.method == "POST": - name: str = request.data.get("name") - email: str = request.data.get("email") - address: str = request.data.get("address") - phone_number: str = request.data.get("phone_number") + name: str = request.POST.get("name") + email: str = request.POST.get("email") + phone_number: str = request.POST.get("phone_number") + + street: str = request.POST.get("street") + city: str = request.POST.get("city") + state: str = request.POST.get("state") + zip_code: str = request.POST.get("zip") + capchaForm = FormWithCaptcha(request.POST) + url = "https://api.example-reverse-search-service.com/v1/search" params = { - 'name': name, - 'email': email, - 'address': address, - 'phone': phone, - 'api_key': api_key - } - - # Send a GET request to the API - response = requests.get(url, params=params) + "name": name, + "email": email, + "phone": phone_number, + + "street": street, + "city": city, + "state": state, + "zip_code": zip_code, + "api_key": 'some_key', + } + try: + contact_obj = Contact.objects.get_or_create( + name=name, + email=email, + phone_number=phone_number, + street=street, + city=city, + state=state, + zip_code=zip_code + ) + capcha = None if settings.DEBUG else FormWithCaptcha() + return render(request, "webpage/contact.html", {'capchaForm':capcha}) + except: + return render(request, "webpage/contact.html", {'capchaForm':capchaForm, 'error':'There was an error. Try again later' }) + capcha = None if settings.DEBUG else FormWithCaptcha() + return render(request, "webpage/contact.html", {'capchaForm':capcha}) - else: - return render(request, "webpage/contact.html", {}) -def process(request): +def process(request): return render(request, "webpage/process.html", {}) + def about_us(request): - return render(request, "webpage/about_us.html", {}) \ No newline at end of file + return render(request, "webpage/about_us.html", {}) diff --git a/requirements.txt b/requirements.txt index 41c97cd..ba5d3df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,13 @@ asgiref==3.7.2 +certifi==2025.1.31 +charset-normalizer==3.4.1 Django==5.0 django-enum==2.1.0 django-phonenumber-field==8.0.0 django-recaptcha==4.0.0 +idna==3.10 phonenumbers==9.0.0 +requests==2.32.3 sqlparse==0.4.4 typing_extensions==4.8.0 +urllib3==2.3.0