From 26f84736145b1d6cceff6561e85a793cb69eca1c Mon Sep 17 00:00:00 2001
From: lb01545 <lb01545@surrey.ac.uk>
Date: Mon, 5 Dec 2022 21:24:12 +0000
Subject: [PATCH] Added contact page and mailer

---
 homeapp/__pycache__/forms.cpython-310.pyc  | Bin 0 -> 640 bytes
 homeapp/__pycache__/urls.cpython-310.pyc   | Bin 317 -> 347 bytes
 homeapp/__pycache__/views.cpython-310.pyc  | Bin 378 -> 1347 bytes
 homeapp/forms.py                           |   8 ++++
 homeapp/templates/homeapp/contact.html     |  18 +++++++++
 homeapp/urls.py                            |   1 +
 homeapp/views.py                           |  33 +++++++++++++++-
 music/__pycache__/settings.cpython-310.pyc | Bin 2601 -> 2718 bytes
 music/__pycache__/urls.cpython-310.pyc     | Bin 1013 -> 1008 bytes
 music/settings.py                          |   5 ++-
 music/urls.py                              |   2 +-
 static/css/base.css                        |  34 ++++++++++++++++
 static/css/base.css.map                    |   2 +-
 static/css/base.scss                       |  43 +++++++++++++++++++++
 14 files changed, 141 insertions(+), 5 deletions(-)
 create mode 100644 homeapp/__pycache__/forms.cpython-310.pyc
 create mode 100644 homeapp/forms.py
 create mode 100644 homeapp/templates/homeapp/contact.html

diff --git a/homeapp/__pycache__/forms.cpython-310.pyc b/homeapp/__pycache__/forms.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a4459ab3cafe0f54f85737ce51465a4f02cef8db
GIT binary patch
literal 640
zcmZ`%y>1jS5VpO$w|kdM2Pr7fiEaz<<&^6X3c4hK5TQt<h^4T6>&azL`xo0wLY=hX
zJ$MXW!z~rBK*jjB;0l=4e46n$9)I>uv%5PYXnXI!<v%DPKYg-oAts0D<{5$_ik76J
z8KvY6QA`E*L<K<C>@LUx6`qka`h|5Qr7pT`bY*g%ZCixNA-b^$Kr*UG#voXSiXuk7
zXF*l?Kvnd>vH`Be|74Q??iqRpeYDk!ssVP}Q86k^+|Ht@t<3ESDm-^lUP@!!(CfV{
zpj2MGv{svxxkSTtS7=afa8sxi*p%r6mFpPcG#$G{h+0-4gc}J_HL5FpJQm`*lV#6n
zhP7_ExRUzB_jki{xV7)<wzDquC2n+F$)fDZ2z=~f(=FGKTbKA^sX@B90%PO~z7ze(
zOYrdfGw%#&{`Tx(y3fnybbo#@=bu1oG2@GmA7<0peDZv90n5qjwk?ZX+M=n=<Ose%
z*|ZhZmM<=N)tMsaS4{=7ZTaTUy=cGc08j94{EQ^z3H9Gowpl+-LpM-sS+AP@f}wxT
b4fR)EA3et1E_vC%&MTZUV*FT*$sYRyQKO;+

literal 0
HcmV?d00001

diff --git a/homeapp/__pycache__/urls.cpython-310.pyc b/homeapp/__pycache__/urls.cpython-310.pyc
index 606e92d552dcb1f98e612606376d0426ed5f93c7..3e67c69df2fe21e6edbad0b535a118df5c77d7c9 100644
GIT binary patch
delta 141
zcmdnXbel;#pO=@50SI2%^d-*&(vLwLWWWaGH~?|6%|vZYiB!fE_EhF9))e*>wqE9R
zrYN=)j$j5&&WUl_Jh#}B^Ycm)lS}+G*(dfWN*8eewcX+_Ey^iKEGbDX$}3*UP{a)s
XE8?DbIFAoxEe`_^BOfy#Bga1g($gMQ

delta 111
zcmcc3w3kUcpO=@50SN4Zx{|Yi^kWbQ8L$F54nSP2H&I)YE1fZlHHAHxL6c)*jyAKO
uCfmftiek68ON(*}5=%-_i}H$BG8BOfEaIAYKaYn4$l_t(VdP`x_zwVFuNE)>

diff --git a/homeapp/__pycache__/views.cpython-310.pyc b/homeapp/__pycache__/views.cpython-310.pyc
index ea8f64c53fe630f0f22bd091c1d53eaed6656f07..e0f78d5e1df0c574f5d2faf4a2b47805cd2143db 100644
GIT binary patch
literal 1347
zcmY*Z&2HO95Z>j#C`x8hxj`-kf%amcl^i3!v_+6aaqApn7h(!G?7^V98;dHJRCiZS
zEYK&l*FHmX?A!Fb*PikUJrtc?MYc;~hci1v&U`c9vg!3g1lRA!e-vN32>q>%+m{8#
zV_0Gef*^t`#Bhe0m04KZR%J6MbC{dC#<nYu`I*mxEHJiHby%2%pu5DYx-7~fv+q|u
z*3bH&2c+{G%C<;Iy6}uil%k#92grtYEY%UTCZ{YfE7gCRlS7&l$`3eiI5?w2Dd!U^
z=1ncA8r-%fl$4wn5~4f~pP*a?e6xp@&*=r_f_}g{4OZQ8Q_H-N-!+_p889kDeojT9
z{hLd-!hto0C1MaIy228*(3BRhY$)40THcv9jOO$CNI!>D$*LX9JqU(MAnUISDx~rY
zNJrnwKN0VP>z|)T3qkqlFnzfDU{sy$KG=V_KYB%Te!4drAHUe!-P=#TN>1om@?<`*
z$|9E~Ku(?kh^m=0TFcS+WW*MtEKFXV|DvRC#BhG899>CA*Q|?oaD=%o{(sPPfdMQ7
z?JrPTGy_<_SiB?g3SibJ62qRg!dC$Ho&6s1pISU~h;<)bSw^!#vyJ9}=Cl@Z?;&G*
z_t8Cc<t{_%wsz~b4)M?N%E9Oa)!Pn|-sN+Q^ez2&K?`!$A;Eha?2vR;*h8;Sir(CK
zyCgK;NcKo~g;zMe@pVXKe0>;8kMvtyu1B+Vr0nkxUMi=~8CAYmoXvn9%B7lHOY7@U
z`5%YA9I#8X`<Pvl2Hf?qXxK7-vF1c_)W{@-mM^!T*B5zJl4NRFnY?ZmH5o3WO`r}k
ztzLe<iPZc`p5-$CCfP(?e{Qg0jwT0i(U3<uuQesNl*g!?HiYZbs+=E=)0ZkJ#i=Pk
zMMXvPnvzojpXQpU+}5J2gS$C_6SOW~xd)TU@q}w8C_nviJU&QM?(0}R{xwlO9%=nk
zE$(XZi53GbwzbfdU5hQy)?|iydtit!K!iBJp#{s_cd>;BK)M)~^>6HeX2ll&3<8gK
z?x>i|^7_1i7IQk(v$!c=bwB#1aLi4~9R5(~`V}#4xGWY@n6eFu>sJ=M5(biTbpyq^
tZ~g0JFq!hq^v6udlyeK1foRYL-?D}*D*8zO3CyXFQEb3O04T5{=RZ~QPL2Qo

delta 199
zcmX@i^^1uwpO=@50SL;2x{@0iCi2PXN&tB&3@MB`47rR^jEoE^OexGQ3{gxeEWr$#
ztS>=|S2EsWD@x5vNiCWz&*&ms!~_)6WV*#(lv-GtT3m9AJvl$GB(<VsB|{P0<R-?n
z7-pb?Viq95!pOr|!~taZX)@muNXbgfOV8IU&d4t+NiHoZE&{0oOBb<$SO|h0$i2m3
VlbfGXnv-hB2;_l{<6+=o0st2kE93wG

diff --git a/homeapp/forms.py b/homeapp/forms.py
new file mode 100644
index 0000000..5c33f15
--- /dev/null
+++ b/homeapp/forms.py
@@ -0,0 +1,8 @@
+from django import forms
+
+class ContactForm(forms.Form):
+    name = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': 'formfield'}))
+    email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'class': 'formfield'}))
+    subject = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': 'formfield'}))
+
+    message = forms.CharField(widget=forms.Textarea(attrs={'class': 'formfield'}), required=True)
diff --git a/homeapp/templates/homeapp/contact.html b/homeapp/templates/homeapp/contact.html
new file mode 100644
index 0000000..40272c5
--- /dev/null
+++ b/homeapp/templates/homeapp/contact.html
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+
+{% block title %}
+ <title>Music Contact</title>
+{% endblock title%}
+
+{% block content %}
+<h1 style="text-align: center;">Contact Us</h1><br><br>
+
+<form method="post", class="myborder">
+    {% csrf_token %}
+    {{ form.as_p }}
+    <div class="form-actions">
+        <button type="submit" class="contactbutton">Send</button>
+    </div>
+</form>
+
+{% endblock content %} 
\ No newline at end of file
diff --git a/homeapp/urls.py b/homeapp/urls.py
index 0d4ddcf..b8c648c 100644
--- a/homeapp/urls.py
+++ b/homeapp/urls.py
@@ -3,4 +3,5 @@ from . import views
 
 urlpatterns = [
     path('', views.home, name='home'),
+    path('contact', views.contact, name='contact'),
 ]
\ No newline at end of file
diff --git a/homeapp/views.py b/homeapp/views.py
index 0d89966..ab9c2e5 100644
--- a/homeapp/views.py
+++ b/homeapp/views.py
@@ -1,5 +1,34 @@
-from django.shortcuts import render
+from django.core.mail import send_mail, BadHeaderError
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render, redirect
+from django.urls import reverse
+from .forms import ContactForm
+from django.contrib import messages
+
 
 def home(request):
     context = {}
-    return render(request, 'homeapp/home.html', context)
\ No newline at end of file
+    return render(request, 'homeapp/home.html', context)
+
+def contact(request):
+    if request.method == "GET":
+        form = ContactForm()
+    else:
+        form = ContactForm(request.POST)
+        if form.is_valid():
+            name = form.cleaned_data['name']
+            subject = form.cleaned_data['subject']
+            email = form.cleaned_data['email']
+            message = name + ':\n' + form.cleaned_data['message']        
+            try:
+                send_mail(subject, message, email, ['myemail@mydomain.com'])
+            except BadHeaderError:
+                messages.add_message(request, messages.ERROR, 'Message Not Sent') 
+                return HttpResponse("Invalid header found.")
+            
+            messages.add_message(request, messages.SUCCESS, 'Message Sent')
+            return redirect(reverse('home'))
+        else:
+            messages.add_message(request, messages.ERROR, 'Invalid Form Data; Message Not Sent') 
+    
+    return render(request, 'homeapp/contact.html', {"form": form})
\ No newline at end of file
diff --git a/music/__pycache__/settings.cpython-310.pyc b/music/__pycache__/settings.cpython-310.pyc
index ba468e10c0ac50ae5816ee96e61e5e0eb6fd67a9..062d0d2223d90fab4da6e275e56d3ae13b2f7ee9 100644
GIT binary patch
delta 185
zcmZ1}GEbB*pO=@50R(LNlKuH6^2sosn5cb_CrT<sE=oE@KA1sMVdDoGcF!u2oFoH7
zQxj8%;?km`)Jna?WWCbtD!r7f#Ju!;z2y9&RK489%pAR>#N_PMyp&>~P+oC<PO6?O
zNZ1J?>Zd8QnV-X#QRkMBi>sSss82||TadqRysNLHr_U{3Fct6Q=<Mz4=dzNaNDJt$
YBCW}(oCS;_ldo|GvT-o6uyHT~03Izi)c^nh

delta 68
zcmbOyx>AHMpO=@50SMfpx{@FAPUMqeJTOuFAWJZVrrgFKGVIKLno^r%IeZy8S27f7
W0M!*~Ouoihz!)&uohy)uhY0{;G7(4s

diff --git a/music/__pycache__/urls.cpython-310.pyc b/music/__pycache__/urls.cpython-310.pyc
index b68ac0b78102b59cbcded475b1c58673e2fe3c29..f7dd1fd04f927c2198835a23a015e0459b710543 100644
GIT binary patch
delta 103
zcmey${()U7pO=@50SF#h^(9L)GcY^`agYJ)L?uH(rYyEB_GYG3mK4@h))cm8#*HcS
snZ(%=Q*tx&^lvd#@nq!ZrY05?=#>`b6i=3C4q@W~no-0vxstgC08UgFumAu6

delta 108
zcmeys{*_%RpO=@50SL|pb|ot?GcY^`agYJaL?uH())dxe#%88emK3&BrYyEB_Khj?
unPgZq@^e%5t9U?EVnKmkX;Dsb6<cCTZf2hTWGUtlHg2FnMck81m}>yfVHqd@

diff --git a/music/settings.py b/music/settings.py
index b0a970b..554167d 100644
--- a/music/settings.py
+++ b/music/settings.py
@@ -131,4 +131,7 @@ STATICFILES_FINDERS = [
     'django.contrib.staticfiles.finders.FileSystemFinder',
     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
     'sass_processor.finders.CssFinder',
-]
\ No newline at end of file
+]
+
+DEFAULT_FROM_EMAIL = "lb01545@surrey.ac.uk"
+EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
\ No newline at end of file
diff --git a/music/urls.py b/music/urls.py
index d03237d..67257d1 100644
--- a/music/urls.py
+++ b/music/urls.py
@@ -17,6 +17,6 @@ from django.contrib import admin
 from django.urls import path, include
 
 urlpatterns = [
-    path('home/', include('homeapp.urls')),
     path('admin/', admin.site.urls),
+    path('', include('homeapp.urls')),
 ]
diff --git a/static/css/base.css b/static/css/base.css
index 4324552..bdbf88c 100644
--- a/static/css/base.css
+++ b/static/css/base.css
@@ -11,4 +11,38 @@ h1 {
 p {
   color: white; }
 
+.formfield {
+  display: block; }
+
+.success {
+  background-color: #00FF00; }
+
+.error, .errorlist {
+  background-color: #FF0000; }
+
+.myborder {
+  width: 500px;
+  margin: 0 auto;
+  padding: 20px;
+  border-style: solid;
+  border-radius: 10px;
+  border-color: #2c2c2c;
+  background: #2c2c2c; }
+
+.contactbutton {
+  color: #fff;
+  background-color: #1DB954;
+  border-color: #1DB954;
+  padding: 0.5rem 1rem;
+  font-size: 1.25rem;
+  border-radius: 0.3rem;
+  width: 100%;
+  border: 1px solid transparent;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }
+
+.contactbutton:hover {
+  background-color: #1db944af;
+  border-color: #1db944af;
+  border: 1px solid transparent; }
+
 /*# sourceMappingURL=base.css.map */
\ No newline at end of file
diff --git a/static/css/base.css.map b/static/css/base.css.map
index c620a1e..e97f6eb 100644
--- a/static/css/base.css.map
+++ b/static/css/base.css.map
@@ -5,5 +5,5 @@
 		"base.scss"
 	],
 	"names": [],
-	"mappings": "AAEA,AAAA,IAAI,CAAC;EACJ,WAAW,EAHL,eAAe,EAAE,SAAS;EAIhC,gBAAgB,EAHT,OAAO;EAId,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GACb;;AACD,AAAA,EAAE,CAAC;EACF,cAAc,EAAE,SAAS;EACzB,KAAK,EAAE,KAAK,GACZ;;AACD,AAAA,CAAC,CAAC;EACE,KAAK,EAAE,KAAK,GACf"
+	"mappings": "AAGA,AAAA,IAAI,CAAC;EACJ,WAAW,EAJL,eAAe,EAAE,SAAS;EAKhC,gBAAgB,EAJT,OAAO;EAKd,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GACb;;AAED,AAAA,EAAE,CAAC;EACF,cAAc,EAAE,SAAS;EACzB,KAAK,EAAE,KAAK,GACZ;;AAED,AAAA,CAAC,CAAC;EACE,KAAK,EAAE,KAAK,GACf;;AAED,AAAA,UAAU,CAAC;EACP,OAAO,EAAE,KAAK,GACjB;;AAED,AAAA,QAAQ,CAAA;EACJ,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,MAAM,EAAE,UAAU,CAAA;EACd,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,SAAS,CAAA;EACL,KAAK,EAAC,KAAK;EACX,MAAM,EAAC,MAAM;EACb,OAAO,EAAE,IAAI;EACb,YAAY,EAAC,KAAK;EAClB,aAAa,EAAE,IAAI;EACnB,YAAY,EAAC,OAAO;EACpB,UAAU,EAAE,OAAO,GACtB;;AAED,AAAA,cAAc,CAAC;EACX,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,OAAO,EAAE,WAAW;EACpB,SAAS,EAAE,OAAO;EAClB,aAAa,EAAE,MAAM;EACrB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,qBAAqB;EAC7B,UAAU,EAAE,yHAAyH,GACxI;;AAED,AAAA,cAAc,CAAC,KAAK,CAAC;EACjB,gBAAgB,EAAE,SAAS;EAC3B,YAAY,EAAE,SAAS;EACvB,MAAM,EAAE,qBAAqB,GAChC"
 }
\ No newline at end of file
diff --git a/static/css/base.scss b/static/css/base.scss
index 02b8312..d31f4d5 100644
--- a/static/css/base.scss
+++ b/static/css/base.scss
@@ -1,15 +1,58 @@
 $font: 'Lucida Grande', monospace;
 $color: #191414;
+
 body {
  font-family: $font;
  background-color: $color;
  margin: 10px;
  padding: 10px;
 }
+
 h1 {
  text-transform: uppercase;
  color: white;
 }
+
 p {
     color: white;
+}
+
+.formfield {
+    display: block;
+}
+
+.success{
+    background-color: #00FF00
+}
+
+.error, .errorlist{
+    background-color: #FF0000
+}
+
+.myborder{
+    width:500px;
+    margin:0 auto;
+    padding: 20px;
+    border-style:solid;
+    border-radius: 10px;
+    border-color:#2c2c2c;
+    background: #2c2c2c;
+}
+
+.contactbutton {
+    color: #fff;
+    background-color: #1DB954;
+    border-color: #1DB954;
+    padding: 0.5rem 1rem;
+    font-size: 1.25rem;
+    border-radius: 0.3rem;
+    width: 100%;
+    border: 1px solid transparent;
+    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+.contactbutton:hover {
+    background-color: #1db944af;
+    border-color: #1db944af;
+    border: 1px solid transparent;
 }
\ No newline at end of file
-- 
GitLab