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