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