From 6885ef7014063b3c7b0fb32d6d5f1545cf578e85 Mon Sep 17 00:00:00 2001 From: Marvin Date: Wed, 18 Nov 2020 22:52:04 +0800 Subject: [PATCH] Converted to a dockerized django project. --- .gitignore | 6 + backend/.gitignore | 1 + CNAME => backend/backend/__init__.py | 0 .../backend/__pycache__/VAR.cpython-38.pyc | Bin 0 -> 207 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 144 bytes .../__pycache__/settings.cpython-38.pyc | Bin 0 -> 2345 bytes .../backend/__pycache__/urls.cpython-38.pyc | Bin 0 -> 979 bytes .../backend/__pycache__/wsgi.cpython-38.pyc | Bin 0 -> 547 bytes backend/backend/asgi.py | 16 +++ backend/backend/settings.py | 124 ++++++++++++++++++ backend/backend/urls.py | 25 ++++ backend/backend/wsgi.py | 16 +++ backend/db.sqlite3 | Bin 0 -> 131072 bytes backend/docker-compose.yml | 8 ++ backend/main.css | 55 ++++++++ backend/manage.py | 22 ++++ backend/myportfolio/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 148 bytes .../__pycache__/admin.cpython-38.pyc | Bin 0 -> 189 bytes .../__pycache__/models.cpython-38.pyc | Bin 0 -> 186 bytes .../__pycache__/views.cpython-38.pyc | Bin 0 -> 637 bytes backend/myportfolio/admin.py | 3 + backend/myportfolio/apps.py | 5 + backend/myportfolio/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 159 bytes backend/myportfolio/models.py | 3 + backend/myportfolio/static/main.css | 55 ++++++++ backend/myportfolio/tests.py | 3 + backend/myportfolio/views.py | 12 ++ backend/requirements.txt | 4 + backend/templates/404.html | 6 + backend/templates/500.html | 6 + backend/templates/base.html | 25 ++++ backend/templates/body_acads.html | 33 +++++ backend/templates/body_certs.html | 18 +++ backend/templates/body_training.html | 4 + backend/templates/body_workexperience.html | 18 +++ backend/templates/index.html | 43 ++++++ backend/templates/navbar.html | 0 pyvenv.cfg | 3 + body.css => wireframe/body.css | 0 body_acads.html => wireframe/body_acads.html | 0 body_certs.html => wireframe/body_certs.html | 0 .../body_training.html | 0 .../body_workexperience.html | 0 index.html => wireframe/index.html | 0 main.css => wireframe/main.css | 0 47 files changed, 514 insertions(+) create mode 100644 .gitignore create mode 100644 backend/.gitignore rename CNAME => backend/backend/__init__.py (100%) create mode 100644 backend/backend/__pycache__/VAR.cpython-38.pyc create mode 100644 backend/backend/__pycache__/__init__.cpython-38.pyc create mode 100644 backend/backend/__pycache__/settings.cpython-38.pyc create mode 100644 backend/backend/__pycache__/urls.cpython-38.pyc create mode 100644 backend/backend/__pycache__/wsgi.cpython-38.pyc create mode 100644 backend/backend/asgi.py create mode 100644 backend/backend/settings.py create mode 100644 backend/backend/urls.py create mode 100644 backend/backend/wsgi.py create mode 100644 backend/db.sqlite3 create mode 100644 backend/docker-compose.yml create mode 100644 backend/main.css create mode 100644 backend/manage.py create mode 100644 backend/myportfolio/__init__.py create mode 100644 backend/myportfolio/__pycache__/__init__.cpython-38.pyc create mode 100644 backend/myportfolio/__pycache__/admin.cpython-38.pyc create mode 100644 backend/myportfolio/__pycache__/models.cpython-38.pyc create mode 100644 backend/myportfolio/__pycache__/views.cpython-38.pyc create mode 100644 backend/myportfolio/admin.py create mode 100644 backend/myportfolio/apps.py create mode 100644 backend/myportfolio/migrations/__init__.py create mode 100644 backend/myportfolio/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 backend/myportfolio/models.py create mode 100644 backend/myportfolio/static/main.css create mode 100644 backend/myportfolio/tests.py create mode 100644 backend/myportfolio/views.py create mode 100644 backend/requirements.txt create mode 100644 backend/templates/404.html create mode 100644 backend/templates/500.html create mode 100644 backend/templates/base.html create mode 100644 backend/templates/body_acads.html create mode 100644 backend/templates/body_certs.html create mode 100644 backend/templates/body_training.html create mode 100644 backend/templates/body_workexperience.html create mode 100644 backend/templates/index.html create mode 100644 backend/templates/navbar.html create mode 100644 pyvenv.cfg rename body.css => wireframe/body.css (100%) rename body_acads.html => wireframe/body_acads.html (100%) rename body_certs.html => wireframe/body_certs.html (100%) rename body_training.html => wireframe/body_training.html (100%) rename body_workexperience.html => wireframe/body_workexperience.html (100%) rename index.html => wireframe/index.html (100%) rename main.css => wireframe/main.css (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a641187 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +VAR.py +Dockerfile +admin +pyenv.cfg +Lib +Scripts \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..1fead83 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1 @@ +VAR.py \ No newline at end of file diff --git a/CNAME b/backend/backend/__init__.py similarity index 100% rename from CNAME rename to backend/backend/__init__.py diff --git a/backend/backend/__pycache__/VAR.cpython-38.pyc b/backend/backend/__pycache__/VAR.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22dd6b871c98bda79c25b18c74d01e3660f36555 GIT binary patch literal 207 zcmWIL<>g`kf^VPK$2$Y*#~=_tPE9UK zEs4)gtz5}a!~`@JO#Cu%v5E;O%FjwoE-8-5O)M(Q%qvOFD=tmUi%CjM&Q8rsfzx4* YL3#z1w>WHa^HWN5Qtd#F{0zhl0Av?8qyPW_ literal 0 HcmV?d00001 diff --git a/backend/backend/__pycache__/__init__.cpython-38.pyc b/backend/backend/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..519f3422cb35c5d00b51a3be08fed6adb1537386 GIT binary patch literal 144 zcmWIL<>g`kg7~*<<3aRe5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hii&acOQGQlx za!GMaZemecW?o5ZUU6w+UQAMAa&~H73Y?CQ&&2lL6eVd|l4U7z>?}^)v~0R0%0e}8Hv~l*Mq(Tx+8|PPO9UWj%}5@Hi!w8e zE57zO^3Xo^1NsB~ih{3w$`2H65H!7%C|QsL)D^|y%w5jCb9nEtTP)@U_+35wtNmL+ z5dKIO^S>M{9>C3hhXDzefJ7v@q9<9BD4-=IyGx#I$)bQIy!@m1Q|4#kFngG_a#*%j z(6W^u2-Ygfpe)Lv6_iJ-s4&P{1yn?5&{?#G&Y^X*0g@s*Z=FFGa1LGE5(Xk#Mwieg zx{R)%t$|EL^xjK(AX;b9Rcj5sk3Il9WlKOGzLbb)okQ2qM__XeeLNmN8IPY5aUfgk z=(@FmZdm6bmkV%Tg!>XIS(|`xb4#!;qg#ehy6xN+1tDKObo@b}Fw8me2TbV)RM~fW z&#;e_Aq@_3kE{9o4)!s1I7Z6;NV$&2K6f1C5no~4p**#`u7nIwloWJZy{m46_angc z0*V#l1H9*O68H-I`2m4|#KpHEKF%L-K4kaGWfb(7I*BpOpci;$?3V$s%!486vGO$G z@&ukAV5J|ruHq8Lm7ssTAqO@BT0)f2#Gde#>TWzj0<^8}VL3AfI^aw&OK5{5lVFw{4e54xbq%qS)pD*I3nW%IA z#zZ#fRXQ02UZNNHYGwTR4^u|_Y6XT}f{*4*zgoz}0Uqb`&|nP|lHRz+<{TF{F=cJu zxiMjK&g;u}Y{DhIXNS-rQ0MA*kEr9})-Wk(Hs@DJJ4g+w%c63M!m&4Wp^4N~J1ugx zI_@VkRkL_yYRRniaZ&uhZRms^>%9}c3Mr?8~>Idlb&Zl$)f!cC}s z2XaDrw7p*#Tz(`uP^w^OgQnvdcY zQ*X5EnyDM{+McmfOYG~lik4JTyi(OnEeUJHn_Aa=Y_~PT*lTsF_O4d1fwBb!SgdQ! zovyZ{+m%*T2f$iGx2+bGOs)$F*Y1AZoXqNXKWoOBL}psB2NPmcl04$obe<&ki$Jdd z5#!8DH`j^f-mUVuUu-%ma-EP_EU6vV>P zT2@|?C3#sAXO|@XB^PF^ME(%ashn4{L_6D_xYtTBfDB#sxPPYgJih+y;ZK!Z)0KGBLhT8VjWv z=5ndDXdrM|Fk%=sjLkv}ZEbC7W=TR-ZeqG2a-~YGHY~Ssu0+CQ@+6)nR+T(AiAzr4 zc$0)LKNA61W)@ylGI#8D$2OqT7{8zt6N$Mfm9{gCms$xdwizkQcJUzpahu;r1_1{O zVJnDTk4K|Pt81+Un_x)k zchZ=0XSRz%tr9SBf6~Y;G`OQE3V%TPqR6YegbFSp2%O_?boPGfHOonj-b7*D&oZc# zEKBdVwb&-r)Bi Dw!|*0 literal 0 HcmV?d00001 diff --git a/backend/backend/__pycache__/wsgi.cpython-38.pyc b/backend/backend/__pycache__/wsgi.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ac4366b5135f8cc157124fc5c1a5e24dfb80b03 GIT binary patch literal 547 zcmYjP!D<^Z5Y@^~>~5QqL&;fJL$jOETPURkr^cmm3Qh3nA=CTRTM9seE?@~18~t%=2Zba#M3k`a-S zq&gZ!m>ZfFjZq^a5Y3xEwq#Ro{iIkmZpmm{(jn<=-~5g*hP^(^teL8uO>M<4MfMep zWMyUNkohEz`<}tK(mHU=&w#B5gx2Cx0~3x3R#>^vu&-eWnk_}8RxKk6kZdv$WvNvr zys~C8LA;O1QrHTZGDujg8q695SB_1UhS$si#53VJa5dhvyrN zzerU->>iE3tk>(tg{YRwcrb1u%=m%-Dc2N9c^%qs*E@cPpMbbFhUT+2eL-K+ Ed+V~RYXATM literal 0 HcmV?d00001 diff --git a/backend/backend/asgi.py b/backend/backend/asgi.py new file mode 100644 index 0000000..6dcedac --- /dev/null +++ b/backend/backend/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for backend 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/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') + +application = get_asgi_application() diff --git a/backend/backend/settings.py b/backend/backend/settings.py new file mode 100644 index 0000000..0c3e837 --- /dev/null +++ b/backend/backend/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for backend project. + +Generated by 'django-admin startproject' using Django 3.1.3. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.1/ref/settings/ +""" + +from pathlib import Path +from .VAR import my_secret_key + +# 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/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = my_secret_key + +# 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', + + 'myportfolio' +] + +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 = 'backend.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + '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 = 'backend.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.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/3.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.1/howto/static-files/ + +STATIC_URL = '/static/' + +STATIC_ROOT = BASE_DIR / 'myportfolio/static' \ No newline at end of file diff --git a/backend/backend/urls.py b/backend/backend/urls.py new file mode 100644 index 0000000..2d30b00 --- /dev/null +++ b/backend/backend/urls.py @@ -0,0 +1,25 @@ +"""backend URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.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 + +from myportfolio.views import home + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', home) + +] diff --git a/backend/backend/wsgi.py b/backend/backend/wsgi.py new file mode 100644 index 0000000..006352d --- /dev/null +++ b/backend/backend/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for backend 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/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') + +application = get_wsgi_application() diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..9985e1021989ece956c3a36e06ccbd14f1e0129c GIT binary patch literal 131072 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 literal 0 HcmV?d00001 diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..e6d75ec --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3.8" + +services: + web: + build: . + command: python manage.py runserver 0.0.0.0:8000 + ports: + - "8000:8000" diff --git a/backend/main.css b/backend/main.css new file mode 100644 index 0000000..64dc19d --- /dev/null +++ b/backend/main.css @@ -0,0 +1,55 @@ +body {margin: 0; + background-color: #d3d3d3; + font-family: sans-serif; +} + +#grid-header-nav{ + display: grid; + align-content: center; + background-color: #004723; + color: white; + height: 85px; +} + +#grid-header-logo{ + font: 36px Righteous; + grid-column-start: 1; + grid-column-end: 2; + margin-left: 5%; +} + +#grid-header-navlist{ + display: grid; + grid-template-columns: auto 20% 20%; + font: 1em Calibri; + grid-column-start: 3; + margin: 0px 10px 0px 10%; +} + + +.grid-footer{ + display: grid; + align-content: center; + text-align: center; + font: 18px Calibri; + color: white; + background-color: #004723; + min-height: 250%; +} +.grid-body-title{ + display: grid; + text-align: center; + margin-bottom: 50px; +} + +.contents-default{ + display: grid; + grid-template-columns: 40% 60%; + margin-left: 5%; + margin-bottom: 20px; +} +.contents-label{ + font-family: Ubuntu; + font-size: 2.8em; + margin: 0px 20px 0px 0px; +} \ No newline at end of file diff --git a/backend/manage.py b/backend/manage.py new file mode 100644 index 0000000..eb6431e --- /dev/null +++ b/backend/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', 'backend.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() diff --git a/backend/myportfolio/__init__.py b/backend/myportfolio/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/myportfolio/__pycache__/__init__.cpython-38.pyc b/backend/myportfolio/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d587f1b16f5ca80f8f34265597bb5d059dc9fba GIT binary patch literal 148 zcmWIL<>g`kf)#Jq#)Ig`AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUS`7ps_nqWrAX zN%0|11EB;o)7 literal 0 HcmV?d00001 diff --git a/backend/myportfolio/__pycache__/admin.cpython-38.pyc b/backend/myportfolio/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1aa4f6cb4e7b571b4f40f7a8ee1ca051e056324a GIT binary patch literal 189 zcmWIL<>g`kf)#Jq#ybJ&#~=g`kf)#Jq#@hht#~=t D3z;u- literal 0 HcmV?d00001 diff --git a/backend/myportfolio/__pycache__/views.cpython-38.pyc b/backend/myportfolio/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..578375e61348ac04c56b859216a4db4fc9685147 GIT binary patch literal 637 zcma)3Jx{|x482RzwDbcIY)lmsT`Go(0U^Y|z*LYbmMT&da@Wr!SA3V20vr69O#Gj$ zO#B7JfE_5RgphD__PZqZd$z9|jVeRi|9J5qIAgDLSvLzWXLxi6onV4TEarXA30sjB z+kG3cEu3f8cSK3J7)zooDi~d{(PORZ8)mYM=Pt-ZNI+D+FlN>{?1aepV>Ti>mv}UZ zGVBrgo-C|kb?>WVOulQ6OdJ7;%Iv%h@-~&)aNb~b_JhL89jya literal 0 HcmV?d00001 diff --git a/backend/myportfolio/admin.py b/backend/myportfolio/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/backend/myportfolio/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/myportfolio/apps.py b/backend/myportfolio/apps.py new file mode 100644 index 0000000..975d611 --- /dev/null +++ b/backend/myportfolio/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MyportfolioConfig(AppConfig): + name = 'myportfolio' diff --git a/backend/myportfolio/migrations/__init__.py b/backend/myportfolio/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/myportfolio/migrations/__pycache__/__init__.cpython-38.pyc b/backend/myportfolio/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bbbccb6d382d5b95b30ec13314b665674555646 GIT binary patch literal 159 zcmWIL<>g`kf|YOA#)Ig`AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUSS7ps_nqWrAX z2CKnE3e2 cyv&mLc)fzkTO2mI`6;D2sdgaKKLarX0ALg;hX4Qo literal 0 HcmV?d00001 diff --git a/backend/myportfolio/models.py b/backend/myportfolio/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/backend/myportfolio/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/backend/myportfolio/static/main.css b/backend/myportfolio/static/main.css new file mode 100644 index 0000000..64dc19d --- /dev/null +++ b/backend/myportfolio/static/main.css @@ -0,0 +1,55 @@ +body {margin: 0; + background-color: #d3d3d3; + font-family: sans-serif; +} + +#grid-header-nav{ + display: grid; + align-content: center; + background-color: #004723; + color: white; + height: 85px; +} + +#grid-header-logo{ + font: 36px Righteous; + grid-column-start: 1; + grid-column-end: 2; + margin-left: 5%; +} + +#grid-header-navlist{ + display: grid; + grid-template-columns: auto 20% 20%; + font: 1em Calibri; + grid-column-start: 3; + margin: 0px 10px 0px 10%; +} + + +.grid-footer{ + display: grid; + align-content: center; + text-align: center; + font: 18px Calibri; + color: white; + background-color: #004723; + min-height: 250%; +} +.grid-body-title{ + display: grid; + text-align: center; + margin-bottom: 50px; +} + +.contents-default{ + display: grid; + grid-template-columns: 40% 60%; + margin-left: 5%; + margin-bottom: 20px; +} +.contents-label{ + font-family: Ubuntu; + font-size: 2.8em; + margin: 0px 20px 0px 0px; +} \ No newline at end of file diff --git a/backend/myportfolio/tests.py b/backend/myportfolio/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backend/myportfolio/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/myportfolio/views.py b/backend/myportfolio/views.py new file mode 100644 index 0000000..d306e1d --- /dev/null +++ b/backend/myportfolio/views.py @@ -0,0 +1,12 @@ +from django.shortcuts import render +from django.http import Http404 +# Create your views here. + +def home(request, *args, **kwargs): + return render(request, 'index.html') + +def page_not_found_view(request, *args, **kwargs): + return Http404("Not yet created :(") + +def internal_server_error_view(request, *args, **kwargs): + return Http404("Not yet created :(") \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..03e3b28 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,4 @@ +asgiref==3.3.1 +pytz==2020.4 +sqlparse==0.4.1 +Django==3.1.3 \ No newline at end of file diff --git a/backend/templates/404.html b/backend/templates/404.html new file mode 100644 index 0000000..6629040 --- /dev/null +++ b/backend/templates/404.html @@ -0,0 +1,6 @@ +{% extends 'base.html' %} + +{% block content %} + Not Found! + You have encountered Error 404. :( +{% endblock %} \ No newline at end of file diff --git a/backend/templates/500.html b/backend/templates/500.html new file mode 100644 index 0000000..d5dea06 --- /dev/null +++ b/backend/templates/500.html @@ -0,0 +1,6 @@ +{% extends 'base.html' %} + +{% block content %} + Internal Server Error + You have encountered Error 500. :( +{% endblock %} \ No newline at end of file diff --git a/backend/templates/base.html b/backend/templates/base.html new file mode 100644 index 0000000..7947780 --- /dev/null +++ b/backend/templates/base.html @@ -0,0 +1,25 @@ + + + + {% load static %} + + + + + + +
+ +
+
Curriculum Vitae
+
About
+
Contact
+
+
+ {% block content %} + {% endblock%} + + + + + \ No newline at end of file diff --git a/backend/templates/body_acads.html b/backend/templates/body_acads.html new file mode 100644 index 0000000..3289119 --- /dev/null +++ b/backend/templates/body_acads.html @@ -0,0 +1,33 @@ +
+ + +

Bachelor of Science in Accountancy

+

Polytechnic University of the Philippines (June 2013 to October 2017)

+

Extra and co-curricular activities:

+
    +
  • PWC M&A Challenge (2017)
  • +
  • UP JPIA APEX Challenge (2017)
  • +
  • NFJPIA-NCR 9th Annual Grand Summit (2016)
  • +
  • SYNTHESIS (2016)
  • +
  • COL-JAPI Stock Market Challenge (2015)
  • +
  • Student Representative (2014)
  • +
  • PUP JPIA Mathematics Competition (2013)
  • +
+ +

Muntinlupa Science High School

+

(June 2009 to March 2013)

+
    +
  • Editor-in-Chief, Ang Matyag
  • +
  • Finalist, Philippine Robotics Olympiad 2012
  • +
  • Champion, 9th UP-ERG Dagitab Competition
  • +
  • Outdoorsman, Boy Scouts of the Philippines
  • +
+ +

Itaas Elementary School

+

(June 2003 to March 2009)

+
    +
  • 8th honorable mention
  • +
  • Science News Editor, Rootlets
  • +
  • Patrol Leader, Boy Scouts of the Philippines
  • +
+
\ No newline at end of file diff --git a/backend/templates/body_certs.html b/backend/templates/body_certs.html new file mode 100644 index 0000000..d9fcf3a --- /dev/null +++ b/backend/templates/body_certs.html @@ -0,0 +1,18 @@ +
+ +

Professional Licenses

+
    +
  • +

    Certified Public Accountant

    +

    Philippine Regulatory Board of Accountancy (May 2018 – present)

    +
  • +
+ + +

Memberships

+
    +
  • +

    Philippine Institute of Certified Public Accountants

    +
  • +
+
\ No newline at end of file diff --git a/backend/templates/body_training.html b/backend/templates/body_training.html new file mode 100644 index 0000000..6d80973 --- /dev/null +++ b/backend/templates/body_training.html @@ -0,0 +1,4 @@ + +
+ Coming soon. +
diff --git a/backend/templates/body_workexperience.html b/backend/templates/body_workexperience.html new file mode 100644 index 0000000..e0d2dcf --- /dev/null +++ b/backend/templates/body_workexperience.html @@ -0,0 +1,18 @@ +
+

Deutsche Knowledge Services Pte. Ltd.

+

+

Senior Financial Analyst | FX Utility (October 2020 to present)

+

+

Financial Analyst | FX Management (June 2018 to September 2020)

+

+ The FX Management team is mandated to hedge cost-related foreign currency transactions incurred from major Deutsche Bank branches across US, UK, and APAC. +

    +
  • Process improvements through Excel VBA automations
  • +
  • Cross-team process improvements through lean principles
  • +
  • 1x Employee of the Month, May 2020
  • +
  • 2x Spot Awardee
  • +
  • 1x Gold Medalist, Continuous Improvement Award
  • +
+

+
+ diff --git a/backend/templates/index.html b/backend/templates/index.html new file mode 100644 index 0000000..08f1f1c --- /dev/null +++ b/backend/templates/index.html @@ -0,0 +1,43 @@ +{% extends 'base.html' %} + Marvin Tensuan — Curriculum Vitae +{% block content %} + + +
+

Marvin D. Tensuan

+

Curriculum Vitae

+ +
+ +
+
Work Experience
+
+ {% include 'body_workexperience.html' %} +
+
+ +
+
Professional Certifications and Affiliations
+
+ {% include 'body_certs.html' %} +
+
+ +
+
Training and Development
+
+ {% include 'body_training.html' %} +
+
+ +
+
Academic Background
+
+ {% include 'body_acads.html' %} +
+
+{% endblock %} \ No newline at end of file diff --git a/backend/templates/navbar.html b/backend/templates/navbar.html new file mode 100644 index 0000000..e69de29 diff --git a/pyvenv.cfg b/pyvenv.cfg new file mode 100644 index 0000000..a5d143c --- /dev/null +++ b/pyvenv.cfg @@ -0,0 +1,3 @@ +home = C:\Users\Marvin Tensuan\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0 +include-system-site-packages = false +version = 3.8.6 diff --git a/body.css b/wireframe/body.css similarity index 100% rename from body.css rename to wireframe/body.css diff --git a/body_acads.html b/wireframe/body_acads.html similarity index 100% rename from body_acads.html rename to wireframe/body_acads.html diff --git a/body_certs.html b/wireframe/body_certs.html similarity index 100% rename from body_certs.html rename to wireframe/body_certs.html diff --git a/body_training.html b/wireframe/body_training.html similarity index 100% rename from body_training.html rename to wireframe/body_training.html diff --git a/body_workexperience.html b/wireframe/body_workexperience.html similarity index 100% rename from body_workexperience.html rename to wireframe/body_workexperience.html diff --git a/index.html b/wireframe/index.html similarity index 100% rename from index.html rename to wireframe/index.html diff --git a/main.css b/wireframe/main.css similarity index 100% rename from main.css rename to wireframe/main.css