From bf21e325c0cc2904ff0af6b35702f62205ca9460 Mon Sep 17 00:00:00 2001
From: Sophie Morris <sm02810@surrey.ac.uk>
Date: Tue, 5 Mar 2024 17:20:34 +0000
Subject: [PATCH] contact section added

---
 main/contactsection/__init__.py               |   0
 .../__pycache__/__init__.cpython-310.pyc      | Bin 0 -> 156 bytes
 .../__pycache__/admin.cpython-310.pyc         | Bin 0 -> 270 bytes
 .../__pycache__/apps.cpython-310.pyc          | Bin 0 -> 451 bytes
 .../__pycache__/forms.cpython-310.pyc         | Bin 0 -> 617 bytes
 .../__pycache__/models.cpython-310.pyc        | Bin 0 -> 675 bytes
 .../__pycache__/urls.cpython-310.pyc          | Bin 0 -> 353 bytes
 .../__pycache__/views.cpython-310.pyc         | Bin 0 -> 972 bytes
 main/contactsection/admin.py                  |   3 +
 main/contactsection/apps.py                   |   6 +
 main/contactsection/forms.py                  |   7 +
 .../contactsection/migrations/0001_initial.py |  25 ++++
 main/contactsection/migrations/__init__.py    |   0
 .../__pycache__/0001_initial.cpython-310.pyc  | Bin 0 -> 818 bytes
 .../__pycache__/__init__.cpython-310.pyc      | Bin 0 -> 167 bytes
 main/contactsection/models.py                 |  10 ++
 .../templates/contactsection/contactpage.html |  10 ++
 .../templates/contactsection/success.html     |   5 +
 main/contactsection/tests.py                  |   3 +
 main/contactsection/urls.py                   |   8 ++
 main/contactsection/views.py                  |  21 +++
 main/db.sqlite3                               | Bin 0 -> 135168 bytes
 main/main/__init__.py                         |   0
 .../main/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 149 bytes
 .../main/__pycache__/settings.cpython-310.pyc | Bin 0 -> 2317 bytes
 main/main/__pycache__/urls.cpython-310.pyc    | Bin 0 -> 981 bytes
 main/main/__pycache__/wsgi.cpython-310.pyc    | Bin 0 -> 552 bytes
 main/main/asgi.py                             |  16 +++
 main/main/settings.py                         | 124 ++++++++++++++++++
 main/main/urls.py                             |  22 ++++
 main/main/wsgi.py                             |  16 +++
 main/manage.py                                |  22 ++++
 32 files changed, 298 insertions(+)
 create mode 100644 main/contactsection/__init__.py
 create mode 100644 main/contactsection/__pycache__/__init__.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/admin.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/apps.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/forms.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/models.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/urls.cpython-310.pyc
 create mode 100644 main/contactsection/__pycache__/views.cpython-310.pyc
 create mode 100644 main/contactsection/admin.py
 create mode 100644 main/contactsection/apps.py
 create mode 100644 main/contactsection/forms.py
 create mode 100644 main/contactsection/migrations/0001_initial.py
 create mode 100644 main/contactsection/migrations/__init__.py
 create mode 100644 main/contactsection/migrations/__pycache__/0001_initial.cpython-310.pyc
 create mode 100644 main/contactsection/migrations/__pycache__/__init__.cpython-310.pyc
 create mode 100644 main/contactsection/models.py
 create mode 100644 main/contactsection/templates/contactsection/contactpage.html
 create mode 100644 main/contactsection/templates/contactsection/success.html
 create mode 100644 main/contactsection/tests.py
 create mode 100644 main/contactsection/urls.py
 create mode 100644 main/contactsection/views.py
 create mode 100644 main/db.sqlite3
 create mode 100644 main/main/__init__.py
 create mode 100644 main/main/__pycache__/__init__.cpython-310.pyc
 create mode 100644 main/main/__pycache__/settings.cpython-310.pyc
 create mode 100644 main/main/__pycache__/urls.cpython-310.pyc
 create mode 100644 main/main/__pycache__/wsgi.cpython-310.pyc
 create mode 100644 main/main/asgi.py
 create mode 100644 main/main/settings.py
 create mode 100644 main/main/urls.py
 create mode 100644 main/main/wsgi.py
 create mode 100644 main/manage.py

diff --git a/main/contactsection/__init__.py b/main/contactsection/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/main/contactsection/__pycache__/__init__.cpython-310.pyc b/main/contactsection/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4cdafdb5ac091c77407ed74177387a85e44e2873
GIT binary patch
literal 156
zcmd1j<>g`kg2P|$rh@3lAOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUThXRDad;?$zz
znBx3`jLewi{9I!LLlfPS)Wlq4ATO^ZF}Var7pEqdWaj6^#K&jmWtPOp>lIYq;;_lh
RPbtkwwF4Pk%mgG@7yz{JCF=kH

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/admin.cpython-310.pyc b/main/contactsection/__pycache__/admin.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9fe65ba4fb16e0f20af228265690ece99862323f
GIT binary patch
literal 270
zcmYk0!AiqG5Qb;6NsQ8#-hBacuqgE;MTFkH6fYqjVs@xove~k;9()^n>?`Fe6#5FD
zI*Ak<n1A?we)z|Y$5$Y8d3~Taxj#MpA0_ZC%Qqq#G&W$dKm;9W)kIbm3W0DFe<!4N
zy&tb2PmYp?9J{2_*0e|bql=|$Lsf^DJS`@AQ?+Y1tHtu>-A5AXQtLD|?BgC{Hi5d#
z)7o$#zXzX*J;?83`B=U(c`n&)KTKIWJHNYsxD8a<xzJE^zD#v6t}TaOX4|hWTS(7m
PLr?u*oQjNKgi|~Lg=0h?

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/apps.cpython-310.pyc b/main/contactsection/__pycache__/apps.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..76a009dd4960504564ab20596df998f66d931229
GIT binary patch
literal 451
zcmY*Wy-ve05I)B#N=wUtx+1Y=AOe*M5GquHtqWp_B3UNqmY^gKaWcRP&w|8r@D`Ss
zn0NpdCeCdU<)r)d-FH9MgFz37-oD<|3+WH%tdmd9nAq%+KtPs5!D7bX63|2b49FFG
z;<1PR6@;Bn%7T#D?pak$bUDlBsf(-=BWFx(h9nfk41uay%+ZT|<b>keA=NfAZH!8r
zOqWZf#~r+r<y=R26BQa&Zld#Se%3bnB2ziWTj{@|Y1pxW5Tz`X5Vj`-)wH>@`$F8e
zGGD!HqngP!Z-gWyF>_GXcW<vycWK0h_&%N-CD%sPCNa9Y&5~3Xqy2-!y++AmMBZZD
zU%eVTkyT})>Y?TY;|^&yNCe=sfGuLvklW4GQZBdlTtAon*Li8VPqM+ua)ncOLgN7Y
GFyueO4RaR&

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/forms.cpython-310.pyc b/main/contactsection/__pycache__/forms.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b15ff17dd226dbf23e7e13a35fdbf45760190e49
GIT binary patch
literal 617
zcmZvZy-ve05Xb$Mq_n9h3<z~)%0LAw6RJ?9N-(txVu>n6p>|8FxG8Zuz*?S!jkn-A
zydoj>6_~h7sE7oX{P*42{`u~lHk)+<<D~tm-eLVfr#b{UeVC>LB8j94(KMu#NG5s0
zG!Ho?H$)2Qyb$Rqx)2*4I?}x*fwzS_B%s!rrkOTdT6*3fUFPv5pWtqFaB%uCO&dg!
zkV+CVU{lF}%{DCLk^@)R#t-5exPLHghdHib6c5D=P_Gn{V*ugLtqP<wRCx?wv5d8{
zj?(cwv7TAqFVrNro>s=hGc^iaTZ<w*6GgTjMLL!11Z_Wx9@lYF?qt|B>%gW;tUH~n
zM4C5}?L)MXuioHtd}mZ<#wJ}o%*T^dchAl*PIDFOE_g+IcB_F5=IL@=^suvfvI28;
z0A^f}8WGf|*#VfNKxFuvSp&sK!SL_HrPab1-p4czN{t-SB7z0FauF|QX@+gIZc&6O
dE7}`kMcDJ=@PAxe>y<sZ!p|-e^odW8*f*}}h?W2V

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/models.cpython-310.pyc b/main/contactsection/__pycache__/models.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..10f6a18e559a3bb847fca32fcfa998a0fe91c012
GIT binary patch
literal 675
zcmYjPJC74F5FYO%`?$@~(a_PQAOal~0(4T~pdl25W);cut%qb+`#9E)IM5YHT+1(@
zfs()E76~bTfr^>k17)OdJoAlb#$&siPE#P+-1&{K1;8(M4kaMxlwj_X(x62RjmU+7
z7oa`uUxW5hRNfaq_jT|FX5pUp!A!VG(`l?t!S12><eU=BOHv5A(2#rRSAiDV`zrDf
z{qK_>kVgaO4_r)KLR?DRkq&f7`!YSz(KX~#9aG!HMT@Srs<8XdRG0dvjk=UIwi~<M
z15LIfE>=6+$+r7Y5b<BwW-JIMCUpfBd;_W~mXs8k-FbzDB{MKszxxS2U)i50i%09X
z279wM-Nm+C7hQ95|G~q17FBaX-f)_KtDypA*RID)nO}T#k(9>vQYPHhBNdBJw{B*b
z-^7-)V;4)=ss^QWsg#tytJ%(^e7{rm80k6PC5x@<&q}Pd3z&E5^G22R$b`st&(pbN
zg_m}uqXvyp8+6lW%HpbQaNzUEU~8qaeMSkxxCiQpIetclIVKfDCSoxn6GLn{3tXZr
m)o!}EJ|9mQzTz)2gb&K`W%gXt#gE7Np7LuL{&^YP_WlC+m7+8N

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/urls.cpython-310.pyc b/main/contactsection/__pycache__/urls.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..718fab25060ecda91d22c2cb84be5feaf4e7021f
GIT binary patch
literal 353
zcmY+9&q~BF5XSSbP1oHm9(;)&T$J^sB7*n5h?mk!Nrv4nO;VCp@gaN=Uny5X+*c3;
zCxV~@`G()jWWK~Lmq!GnK6!@^%x?+)hD5l<6E-NCXxbA)Yid}{DA7#wo*PjMN`Pqr
zVxQ?u=Pw*7`$rNf*E03Cyq3DSC)MnLJ4wZ&?5yf14N(m3xI55Pr7?T#;3-5BrE+#`
z)rd7=TLV#sNht_nQx$Qp_pRN!)#Ur&8Q%0fNuDH2l78T4C~=N6XfT4e;g$GBY9#r*
zy1Q&10{GAbH|)AbIkP@Hzc?MCHEX0F_um{qjh(YiGF%PMvA8x)Pd(hEXNR=!m@H_?
JOIp(6>l=!JSmgi!

literal 0
HcmV?d00001

diff --git a/main/contactsection/__pycache__/views.cpython-310.pyc b/main/contactsection/__pycache__/views.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..470ebe06e3ca3e6f381c6b8d558d7f55295fc311
GIT binary patch
literal 972
zcmZWoO>fjN5ViBYU+uP3REPuT99Tf*gert6MHLbSwQz}6szPkKDRHuly#=c6sr(Rn
z>|gQ~38{a917gP6RuwqPcxG&8-h1OTgF%<!cy;HOyzm(NNx{v5Ira=+U7-<7@QNv(
zaph&6@-v@P&Z`0yW}%9*$i;pYt0YTQC+oO4sJg0`^_(A8eKp7i=tm;1meg{#jD8|I
z-&r;kUD3mNMfCSsI=IA&EcI<i%UT?$ysYff^IYu6Tu9gkXu$TjDg9b%ogd27v;7@o
zrh8IPn_5e|b~D<Oq6AqO+!X<SP=Zb1D#vXM@>qhFDYuDgzo#!b0pPZ`)zl_0%*zH;
zLAk3z;sp3^;j4#eN_NT(o1;u~e&!<yZ};SG(Vo^=ylm<RdR7!zU^FqRN;$-M3^8H-
z&oilwjcL35YAzTo<I?ZVttaF68ljDKGo6&<qEQ<UA3eTrWUe+aa>%acMUC-sDZl8^
z^qY+r)jEWbpa#6pVFjK4h=iDQL|&jXXGcillLzaDqwk&ZQ>666KWA_o=ir=iW<r7a
zeOCL1pAqp0iTfg$^Rgu$?%Lq(oBemL-pRdxbXbH_?3~lW1|L!1G`5kFX3_}gBMw+a
zW0O)J9OqRjY@l;&Q$j1Pa4;bM78#POHPnh$NbDMIaLwuRE>GO!{fUAhhjm=pO;_zu
z9Od<4Gb$R8Bf3yPjRl_!X=Zzi4HLXwKsrH$2JdToPEQ&z#ms1j$)USGGJ{G3sc)CA
wtJDU{4?zE&4T-aEsZv)QrW;HgCr2mQRE?Nb@+n<F$7hWV`4HPlPvZB3zsa@mZ2$lO

literal 0
HcmV?d00001

diff --git a/main/contactsection/admin.py b/main/contactsection/admin.py
new file mode 100644
index 0000000..7f0fe3c
--- /dev/null
+++ b/main/contactsection/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+from .models import Contact
+admin.site.register(Contact)
diff --git a/main/contactsection/apps.py b/main/contactsection/apps.py
new file mode 100644
index 0000000..4f028d4
--- /dev/null
+++ b/main/contactsection/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class ContactsectionConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'contactsection'
diff --git a/main/contactsection/forms.py b/main/contactsection/forms.py
new file mode 100644
index 0000000..a5feaed
--- /dev/null
+++ b/main/contactsection/forms.py
@@ -0,0 +1,7 @@
+from django import forms
+from .models import Contact
+
+class ContactForm(forms.ModelForm):
+    class Meta:
+        model = Contact
+        fields = ['name', 'email', 'subject', 'message']
\ No newline at end of file
diff --git a/main/contactsection/migrations/0001_initial.py b/main/contactsection/migrations/0001_initial.py
new file mode 100644
index 0000000..61f00ed
--- /dev/null
+++ b/main/contactsection/migrations/0001_initial.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.1.7 on 2024-03-04 18:52
+
+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')),
+                ('name', models.CharField(max_length=128)),
+                ('email', models.EmailField(max_length=254)),
+                ('subject', models.CharField(max_length=256)),
+                ('message', models.TextField()),
+                ('sent_at', models.DateTimeField(auto_now=True)),
+            ],
+        ),
+    ]
diff --git a/main/contactsection/migrations/__init__.py b/main/contactsection/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/main/contactsection/migrations/__pycache__/0001_initial.cpython-310.pyc b/main/contactsection/migrations/__pycache__/0001_initial.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..fb70db50b8c122f7a977aceb8a5b47470c794a95
GIT binary patch
literal 818
zcmYjPOK%e~5VpOWWV6|X@(|*{4TO{fRjP7A2o+L_IJ6haWfjSCcBWg0eT4M}+MbZ$
z+W!DY{*tdqNI7%sp)lU0YHiJUzL~M-<+9%o8Li~OAN(sA`|ZHZ<rCN;GEayB1D>&*
z$2=FY;Os2}0p5289`c#@&5J$o-?L$BNxp0-Y?$k`QnfA%W7~NNn3=?xZmu4I9U^l^
z3|Y*9#R7Qjr7ZTbHEX*N*qH^uY5UNE_PKu~phLPY1kgR_ghE0g^wub9Z2dJFVCP5g
zCnK+0q>t#84R<GP!|ijC^0*IoDCxVlyMLAKq3w*zqE<<5g@!#V-t7*38>vNI%A`V7
zBiP=&(z&Wm<wrcVU4xZYnLa}sea3298kB{~(fW=rzfx&KPVG=9GQ%RRk8KNcrL*NF
zS!~BFrZY_HCF2g|XpBmc)L7I~)pRpxLKo$ip{OEvrG2C^19LDO*g!U+q_m-w)Z|5m
zBu7$yTByv0C)Ck}t|>tq0nV`iEE0{TqJcBp8#fj0yYW<>(?qXz`ig4Zb1`gpe5|UK
z7`|~yuhoZmQm@4RE_LKk=eYJN=eVBwFIGLG7aMkQFn&JyK#ejJQ_hd|Bq{Ul(blu4
zHL84@P}A_M(@;O?-%PH5&}1|kZOL^ZoAcAkea$wJc}Of^zM$<3eoqXz+aZy-@GpaZ
rjpqSPunRL)q~#_|o6?(V8{>7BE9o)4XoDB4ZoZ_cFyo?ai2L4uN0#Pm

literal 0
HcmV?d00001

diff --git a/main/contactsection/migrations/__pycache__/__init__.cpython-310.pyc b/main/contactsection/migrations/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ca22bab55ad09ae8b651504328a73df5385a92e7
GIT binary patch
literal 167
zcmd1j<>g`kg2P|$rh@3lAOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUSqXRDad;?$zz
znBx3`jLewi{9I!LLlfPS)Wlq4ATO^ZF}Var7pEqdWaj6^<YuN9C4yMRG4b)4d6^~g
a@p=W7w>WHa^HWN5Qtd!?6f*${76t&S5-N`X

literal 0
HcmV?d00001

diff --git a/main/contactsection/models.py b/main/contactsection/models.py
new file mode 100644
index 0000000..a046dce
--- /dev/null
+++ b/main/contactsection/models.py
@@ -0,0 +1,10 @@
+from django.db import models
+
+class Contact(models.Model):
+    name = models.CharField(max_length = 128)
+    email = models.EmailField()
+    subject = models.CharField(max_length = 256)
+    message = models.TextField()
+    sent_at = models.DateTimeField(auto_now = True)
+    def __str__(self):
+        return f"{self.subject}"
\ No newline at end of file
diff --git a/main/contactsection/templates/contactsection/contactpage.html b/main/contactsection/templates/contactsection/contactpage.html
new file mode 100644
index 0000000..6783cba
--- /dev/null
+++ b/main/contactsection/templates/contactsection/contactpage.html
@@ -0,0 +1,10 @@
+<html>
+    <body>
+        <p>Welcome to the contact page. Fill out the form displayed below to get in touch with us</p>
+        <form method="post">
+            {% csrf_token %}
+            {{ form.as_p }}
+                <button type="submit">Send</button>
+        </form>
+    </body>
+</html>
\ No newline at end of file
diff --git a/main/contactsection/templates/contactsection/success.html b/main/contactsection/templates/contactsection/success.html
new file mode 100644
index 0000000..d65b619
--- /dev/null
+++ b/main/contactsection/templates/contactsection/success.html
@@ -0,0 +1,5 @@
+<html>
+    <body>
+        <p>Thank you for contacting us, we will get back to you with a response as soon as we can.</p>
+    </body>
+</html>
\ No newline at end of file
diff --git a/main/contactsection/tests.py b/main/contactsection/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/main/contactsection/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/main/contactsection/urls.py b/main/contactsection/urls.py
new file mode 100644
index 0000000..eec6b62
--- /dev/null
+++ b/main/contactsection/urls.py
@@ -0,0 +1,8 @@
+from django.urls import include, path
+from . import views
+
+urlpatterns = [
+    path('', views.contact, name='contact'),
+    path('contact', views.contact, name='contact'),
+    path('success', views.success, name='success'),
+]
\ No newline at end of file
diff --git a/main/contactsection/views.py b/main/contactsection/views.py
new file mode 100644
index 0000000..57914eb
--- /dev/null
+++ b/main/contactsection/views.py
@@ -0,0 +1,21 @@
+from django.core.mail import send_mail, BadHeaderError, EmailMessage
+from django.http import HttpResponse, HttpResponseRedirect 
+from django.shortcuts import render, redirect 
+from django.urls import reverse
+from django.contrib import messages
+from .forms import ContactForm 
+
+
+def success(request):
+    context = {}
+    return render(request, 'contactsection/success.html', context) 
+
+def contact(request):
+  if request.method == "POST":
+    form = ContactForm(request.POST) 
+    if form.is_valid(): 
+      form.save()
+      return redirect('success')
+  else:
+    form = ContactForm()
+  return render(request, 'contactsection/contactpage.html', {'form': form})
\ No newline at end of file
diff --git a/main/db.sqlite3 b/main/db.sqlite3
new file mode 100644
index 0000000000000000000000000000000000000000..84f1cdcc5cff7298137b780d42950c3268fc0f6b
GIT binary patch
literal 135168
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
ZR)EcxDuvd0L!|%DO>=PsT!@8Z{|mkeUTXjV

literal 0
HcmV?d00001

diff --git a/main/main/__init__.py b/main/main/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/main/main/__pycache__/__init__.cpython-310.pyc b/main/main/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b596811515d710b9c0c9f9a560460d86fe36df17
GIT binary patch
literal 149
zcmd1j<>g`kg4VBhQ$h4&5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H8vsFxJacWU<
zOmTieMrKTMey*{Bp^0uuYGST2ke64Im|Oy<<Kr{)GE3s)^$IF)aoFVMr<CTT+JQ_g
JW&#o{3;=C<BC!Af

literal 0
HcmV?d00001

diff --git a/main/main/__pycache__/settings.cpython-310.pyc b/main/main/__pycache__/settings.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3caa6694b19394dc2a6efe53031e9f780c34f0b6
GIT binary patch
literal 2317
zcmb7FS#R4$5GHBrh+-v<ovR57FhJ8-aZJTf(i~{h&=T#a(FK#TTf!(oaaZy>JQVIS
zj``ZZk%u-91^SoxTA)DxKp%>t$&jLLK@Lz?HkZ3|d^7v)%+fEHOC0<jUi|~t%N+N6
zvY7tmVeuRu`YQ~GGdRQ}!QoxO5O@v?c<v|uXYm(qKewMV@@UQ|Akip}IOE)iL%H|7
zQG$0K-se%lm`9*NB1&|n_dMaz`FG-oH_B+<xPZ#&0?wn0H#xNMP9VH-5nV!yU~>sA
zrQ_vvyh8YqXe^+s#wB#kScGUx@LWdMjVtIg<0`tLah03aJ)YxAjeW}-`4Yv95pP7L
zp&v-L?=j0}(m3$<vCZUCX%l-muoy<t;841QQlC`|xx|wwvjUb`-jPBIC{hOcKwgs{
zf%gVrx_*Eq;sLyCG2(j?{Ifj*0f~d}L3~`=V{A;HR;$RjsXU2sl!5KLRqRy(u*&=~
zv1#=v;pzmQ?O|ycI*#NJ$|QeyvLVYu5D1e%dSf{urvE2afQM6o{)EHjDts*VEVdV|
zXDkqpVml1*YQ=Kyj%rWt4t`u2tgO8H;^Euct&r@md}A-8+sn6~gwN@H6q5UH4S!iV
zSR=O{>6Josc>*IRoCjner=&(pv(gYE-kcF8F4$x2aExhmZAM8kr9ks(g$oL61RghL
zJs2E}og4>^ma`IottE#gTjMd6>yxs`WUv~N5$s?!!*K~h4nD8~ET@bRb|`BJH85!(
z>!Js<VY5W#DSvGuoARoh4gxjdLTdH&^&h4*7|L}Rwh2C%GJQ0Yiv=`K=b^wF7$$aF
zvQv(;n>ZqM+POU;ddlmoPi(>=_N#r%eg$nKf4>n}F7A#K%ITEfe0Cag7&tVlW+)81
zV+VRt9)LUc&{5CGjkG=WOikm(#2vq7CUlbxN%;Y-h|%&a%xNnb;Xycx?w-Liz^|dV
zShSMaCSYkfCyagqIbk}g%@`lE_z8z2T}6xw>q`Bl+G)gMqq(KUMWxp>(^;Y0)0^Fn
z7F|yO;0BWq=!hi63oNHc7#9#8TA{;^s~-(c_@l2K!f-7rfiRm_ggCEuHk%za7CTB?
z4U!K*^kOFQv~I>0r3Ze1Ot@zVO2f&0iUWluOoR+;#3hcEw8Qqq!VjWnXGLlgkGP@R
z!rqAOo%nxyR{u$x^s*dJ0G^)}pcA?{Aogj59QIa28qf9hdQ^a~0klgs`aFXLCS4z4
zhsx_@1nuN+5bU5%<yu@YO}OYyGcJtbI(5h(5P;gaXqw3tl*j{2edi61^JBPEJZ2Qv
z6-`Y}IxcByeM{BNm+B93uA#2?H{-I>YIS$ihWVna=~{fD+0k?mfdI-wi%achqtQ}#
zlr1%$-|BXCv%l4<cRL&LIbCh{T8ge}@xqR_*-Y$P&AO6QQhctV=t>e+i?1tv{e{_6
zG;OE5)iAe}Ruhz6D8O<{>1_6uP1US-8!7-c+p1}Fp=64ENVvK7xD)4-nQlPlIw04R
z=<#Ah-B9{1-2~*WxzSWxjo-N77O;>Ge?P82-AxLJ?oxleM|R=DtKDCFu*$II)?k&E
z`0@MbgD8&=<Kovqdg$P1@P+5-cQA<D{QSb4SP<t#p_nU{#F8KiyucR);e+^(_(5C{
a3Id<!#eZR52AMeZ{3R}lU=DxzV(uf|qZ{%7

literal 0
HcmV?d00001

diff --git a/main/main/__pycache__/urls.cpython-310.pyc b/main/main/__pycache__/urls.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..22791bb816abec961e683216cc8ba902e48c08f3
GIT binary patch
literal 981
zcma)5-HOvd7@ef)k7-v0UtsRiKsT{&uY!tFTwD+@)V(Q%?ld!PQ!+DQW}@!i_Gx^j
z+zNuP;Dz{2no1Ca9mr&6I5~69`M$`rGatdwy&o*;AoSgC+M^4bSMX>%QM5qRp>FPQ
zci}pA-N`%LTX?*?=sJjb)MM_xx9=ZZSa(^M_72X$-MWhb?SDk!fD|r5sT78!248=8
zhv!mkvTdn|$)xc8PdkQhN|hJH7^Z~2!Fi?)R<blq+YdB05`WIv7aieCsW6v{;Y@6#
z;xz>>az-@6nz6*kFm}ciI*DT{QytMg5nEX(xo4?~QpsZ`;#o9}jV!WM#}*vJ^*Z+7
zd?g&XbmCu@BDLy{*Vd%d2*0Kj6M-{cNM#a?H%fBMZ&#!!n!^_US%a@FgMpSq_!P|U
z#z8P?eC;G>6D$a4F9N#`LVunUt<TqBjJ8<+r$U+?Q&vb+2X&J37PxBl_f%u?5z#A4
zG7kSybS2Wfq?y=42=#r|8WeVO%IB&M27?qRkHxZah&N4?$uX{DIU*bQNo0ea)S=v4
z?K+p+7y>-q6xf5BHwZ)jC$ugKovKSH&qU}}o=v>!H|V=weI8fn?n%>{8rlOYUNgK8
zA5{I-3i@ZYT0CqdTb#<)3c49p!<G*PKM_)%J@#~FSmjxF)v#6ZZ%7R-$WFgz^JICg
znbJ!wi(R&ap1gQEot+y-_yz3hKjrV+az({$HF(Y?EpztL0S-Na$wQ+@kDXCx<P3iQ
E0X4!f4FCWD

literal 0
HcmV?d00001

diff --git a/main/main/__pycache__/wsgi.cpython-310.pyc b/main/main/__pycache__/wsgi.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5bbb1fa229f8dda737be0389904e5e360d3df133
GIT binary patch
literal 552
zcmYjP!EO^V5cN7~Qx=MPKt1~!iSD*)P8C8$w2guwJ){*<6lr7DlZ_*<XSH@y+AHE4
zxWbVyLbAk(6Cc2Z6SE1RjN}=QM>FrujB$52W+WefeTPpGV?P>aQ`+R5(s75R6dN-Y
zDQ=>1M7Cvk*&4SZ2GOGZc}um`))!7*>jN8aD?Vb~?fY->+fjcYa<nsDh#A(+)yv$A
zs>TK6K8fRj7x2D92Tu4oh;@QAM!qv3q!Ut<sBR1#7+8W4OIhnx$jTCwm`-I?8J$b7
z(N3pS?}AWDtU+i?faNM6&{A>j#7rA_DjYyO_r7u`X{s=HiCRco;6F||mMPe@mmH;Y
zy!DtWs0`kfV10V)3Z2G3X&h|Wjlz=xeAc{W8#KcH*{c`B{$(~gzq%R>`=jj5<=OS?
z^ZUKO-6syb*S2uoPUvJAQOL5u(S^M=kt8SnNmI7w1Qa@8m%2t9VoFpnlQ+hPhZ~4r
zS=}shrGEEbo=mPC)NbOin(GO*b9{KzJMbXOWAauD_-`AOq`C_`&(>ppPXB<prdpfr
LJb1((^O*kudDN^@

literal 0
HcmV?d00001

diff --git a/main/main/asgi.py b/main/main/asgi.py
new file mode 100644
index 0000000..b0b4e0a
--- /dev/null
+++ b/main/main/asgi.py
@@ -0,0 +1,16 @@
+"""
+ASGI config for contact project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'contact.settings')
+
+application = get_asgi_application()
diff --git a/main/main/settings.py b/main/main/settings.py
new file mode 100644
index 0000000..ca1c6f5
--- /dev/null
+++ b/main/main/settings.py
@@ -0,0 +1,124 @@
+"""
+Django settings for contact project.
+
+Generated by 'django-admin startproject' using Django 4.1.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.1/ref/settings/
+"""
+
+from pathlib import Path
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-)al*g39*b^+b++k$5x3!uij+=c(d%(%9u@s0dui0m3e&)w1i!7'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'contactsection.apps.ContactsectionConfig'
+]
+
+MIDDLEWARE = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'contact.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'contact.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': BASE_DIR / 'db.sqlite3',
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/4.1/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/4.1/howto/static-files/
+
+STATIC_URL = 'static/'
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
diff --git a/main/main/urls.py b/main/main/urls.py
new file mode 100644
index 0000000..1b6491c
--- /dev/null
+++ b/main/main/urls.py
@@ -0,0 +1,22 @@
+"""contact URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+    path('admin/', admin.site.urls),
+    path('', include('contactsection.urls')),
+]
diff --git a/main/main/wsgi.py b/main/main/wsgi.py
new file mode 100644
index 0000000..dfb0440
--- /dev/null
+++ b/main/main/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for contact project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'contact.settings')
+
+application = get_wsgi_application()
diff --git a/main/manage.py b/main/manage.py
new file mode 100644
index 0000000..52d397e
--- /dev/null
+++ b/main/manage.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+    """Run administrative tasks."""
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'contact.settings')
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+    main()
-- 
GitLab