· 4 years ago · Oct 16, 2020, 07:38 AM
1#models.py for portfolio
2from django.db import models
3from datetime import date
4# Create your models here.
5class Language(models.Model):
6 language = models.CharField(max_length = 30)
7 image = models.ImageField(upload_to='images/')
8
9 def __str__(self):
10 return self.language
11
12class Framework(models.Model):
13 image = models.ImageField(upload_to='images/')
14 framework = models.CharField(max_length = 30)
15 language = models.ForeignKey(Language, on_delete=models.CASCADE)
16
17 def __str__(self):
18 return self.framework
19
20class JobNoFramework(models.Model):
21 job = models.CharField(max_length=30)
22 language = models.ForeignKey(Language, on_delete=models.CASCADE)
23 image = models.ImageField(upload_to='images/')
24 summary = models.CharField(max_length=200)
25 submissionDate = models.DateField(default = date.today, blank = True)
26 paste = models.CharField(max_length = 100)
27 def __str__(self):
28 return self.job + "\n" + self.summary
29
30class JobYesFramework(models.Model):
31 job = models.CharField(max_length=30)
32 framework = models.ForeignKey(Framework, on_delete=models.CASCADE)
33 image = models.ImageField(upload_to='images/')
34 summary = models.CharField(max_length=200)
35 submissionDate = models.DateField(default = date.today, blank = True)
36 paste = models.CharField(max_length = 100)
37
38 def __str__(self):
39 return self.job + "\n" + self.summary
40
41#views.py for portfolio
42from django.shortcuts import render, get_object_or_404
43
44from .models import Framework, Language, JobNoFramework, JobYesFramework
45
46# Create your views here.
47def home(request):
48 languages = Language.objects
49 return render(request, 'jobs/home.html',{'languages':languages})
50def lang_detail(request, lang_id):
51 language = get_object_or_404(Language, pk=lang_id)
52 projects = JobNoFramework.objects
53 frameworks = Framework.objects
54 return render(request, 'jobs/language.html', {'languages':language, "projects":projects, "frameworks":frameworks})
55def frame_detail(request, frame_id):
56 framework = get_object_or_404(Language, pk=frame_id)
57 projects = JobYesFramework.objects
58 return render(request, 'jobs/framework.html', {"projects":projects, "frameworks":framework})
59def project_detail(request, project_id):
60 project_detail = get_object_or_404(JobNoFramework, pk=project_id)
61 return render(request, 'jobs/detail.html', {'project_detail':project_detail})
62def framework_project_detail(request, project_id):
63 project_detail = get_object_or_404(JobYesFramework, pk=project_id)
64 return render(request, 'jobs/detail.html', {'project_detail':project_detail})
65
66#apps.py for portfolio
67from django.apps import AppConfig
68
69
70class JobsConfig(AppConfig):
71 name = 'jobs'
72
73#settings.py for whole project
74"""
75Django settings for portfolio project.
76
77Generated by 'django-admin startproject' using Django 2.1.
78
79For more information on this file, see
80https://docs.djangoproject.com/en/2.1/topics/settings/
81
82For the full list of settings and their values, see
83https://docs.djangoproject.com/en/2.1/ref/settings/
84"""
85
86import os
87
88# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
89BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
90
91# Quick-start development settings - unsuitable for production
92# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
93
94# SECURITY WARNING: keep the secret key used in production secret!
95SECRET_KEY = '1cq*4)t(i5fjjzm73dp0i64v&3g8kw@&79k883x4kl@l5^1rs&'
96
97# SECURITY WARNING: don't run with debug turned on in production!
98DEBUG = True
99
100ALLOWED_HOSTS = ['*']
101
102
103# Application definition
104
105INSTALLED_APPS = [
106 'django.contrib.admin',
107 'django.contrib.auth',
108 'django.contrib.contenttypes',
109 'django.contrib.sessions',
110 'django.contrib.messages',
111 'django.contrib.staticfiles',
112 'jobs',
113 'resume',
114]
115
116MIDDLEWARE = [
117 'django.middleware.security.SecurityMiddleware',
118 'django.contrib.sessions.middleware.SessionMiddleware',
119 'django.middleware.common.CommonMiddleware',
120 'django.middleware.csrf.CsrfViewMiddleware',
121 'django.contrib.auth.middleware.AuthenticationMiddleware',
122 'django.contrib.messages.middleware.MessageMiddleware',
123 'django.middleware.clickjacking.XFrameOptionsMiddleware',
124]
125
126ROOT_URLCONF = 'portfolio.urls'
127
128TEMPLATES = [
129 {
130 'BACKEND': 'django.template.backends.django.DjangoTemplates',
131 'DIRS': [os.path.join(BASE_DIR, 'jobs', 'templates', 'jobs'),
132 os.path.join(BASE_DIR, 'resume', 'templates', 'resume'),],
133 'APP_DIRS': True,
134 'OPTIONS': {
135 'context_processors': [
136 'django.template.context_processors.debug',
137 'django.template.context_processors.request',
138 'django.contrib.auth.context_processors.auth',
139 'django.contrib.messages.context_processors.messages',
140 ],
141 },
142 },
143]
144
145WSGI_APPLICATION = 'portfolio.wsgi.application'
146
147
148# Database
149# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
150
151DATABASES = {
152 'default': {
153 'ENGINE': 'django.db.backends.sqlite3',
154 'NAME': 'myDatabase',
155 }
156}
157
158
159# Password validation
160# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
161
162AUTH_PASSWORD_VALIDATORS = [
163 {
164 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
165 },
166 {
167 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
168 },
169 {
170 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
171 },
172 {
173 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
174 },
175]
176
177
178# Internationalization
179# https://docs.djangoproject.com/en/2.1/topics/i18n/
180
181LANGUAGE_CODE = 'en-us'
182
183TIME_ZONE = 'EST'
184
185USE_I18N = True
186
187USE_L10N = True
188
189USE_TZ = True
190
191
192# Static files (CSS, JavaScript, Images)
193# https://docs.djangoproject.com/en/2.1/howto/static-files/
194
195STATIC_URL = '/static/'
196STATIC_ROOT = os.path.join(BASE_DIR, 'static')
197
198MEDIA_ROOT = BASE_DIR
199MEDIA_URL = '/media/'
200
201#urls.py for portfolio
202"""portfolio URL Configuration
203
204The `urlpatterns` list routes URLs to views. For more information please see:
205 https://docs.djangoproject.com/en/2.1/topics/http/urls/
206Examples:
207Function views
208 1. Add an import: from my_app import views
209 2. Add a URL to urlpatterns: path('', views.home, name='home')
210Class-based views
211 1. Add an import: from other_app.views import Home
212 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
213Including another URLconf
214 1. Import the include() function: from django.urls import include, path
215 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
216"""
217from django.contrib import admin
218from django.urls import path, include
219import jobs.views, resume.views
220from django.conf import settings
221from django.conf.urls.static import static
222
223
224urlpatterns = [
225 path('admin/', admin.site.urls),
226 path('resume/',include('resume.urls')),
227 path('', jobs.views.home, name='home'),
228 path('language/<int:lang_id>', jobs.views.lang_detail, name='language details'),
229 path('language/framework/<int:frame_id>', jobs.views.frame_detail, name='framework details'),
230 path('language/project/<int:project_id>', jobs.views.project_detail, name='project details'),
231 path('language/framework/project/<int:project_id>', jobs.views.framework_project_detail, name='framework project details'),
232]
233urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
234urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
235
236#wsgi.py
237
238"""
239WSGI config for portfolio project.
240
241It exposes the WSGI callable as a module-level variable named ``application``.
242
243For more information on this file, see
244https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
245"""
246
247import os
248
249from django.core.wsgi import get_wsgi_application
250
251os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'portfolio.settings')
252
253application = get_wsgi_application()
254
255#admin.py for resume
256from django.contrib import admin
257from .models import Myself, Skill, Education, Job
258# Register your models here.
259@admin.register(Myself)
260class MyselfAdmin(admin.ModelAdmin):
261 list_display = ['position']
262@admin.register(Skill)
263class SkillAdmin(admin.ModelAdmin):
264 list_display = ['language','comfort']
265@admin.register(Education)
266class EducationAdmin(admin.ModelAdmin):
267 list_display = ['institution','type', 'start_date', 'end_date', 'gpa']
268@admin.register(Job)
269class JobAdmin(admin.ModelAdmin):
270 list_display = ['company','position','start_date','end_date']
271
272#apps.py for resume
273from django.apps import AppConfig
274
275
276class ResumeConfig(AppConfig):
277 name = 'resume'
278
279#models.py for resume
280
281from django.db import models
282from datetime import date
283from django import forms
284# Create your models here.
285INTEGER_CHOICES= [tuple([x,x]) for x in range(0,101)]
286class Myself(models.Model):
287 image = models.ImageField(upload_to='images/')
288 position = models.CharField(max_length=75)
289 summary = models.TextField()
290class Education(models.Model):
291 institution = models.CharField(max_length = 75)
292 gpa = models.FloatField()
293 start_date = models.DateField()
294 end_date = models.DateField()
295 summary = models.TextField()
296 type = models.CharField(max_length = 30)
297class Skill(models.Model):
298 language = models.CharField(max_length = 30)
299 comfort =models.IntegerField(choices=INTEGER_CHOICES)
300class Job(models.Model):
301 company = models.CharField(max_length = 75)
302 position = models.CharField(max_length = 75)
303 summary = models.TextField()
304 start_date = models.DateField()
305 end_date = models.DateField()
306
307#urls.py for resume
308
309"""portfolio URL Configuration
310
311The `urlpatterns` list routes URLs to views. For more information please see:
312 https://docs.djangoproject.com/en/2.1/topics/http/urls/
313Examples:
314Function views
315 1. Add an import: from my_app import views
316 2. Add a URL to urlpatterns: path('', views.home, name='home')
317Class-based views
318 1. Add an import: from other_app.views import Home
319 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
320Including another URLconf
321 1. Import the include() function: from django.urls import include, path
322 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
323"""
324from django.contrib import admin
325from django.urls import path, include
326import jobs.views, resume.views
327from django.conf import settings
328from django.conf.urls.static import static
329
330
331urlpatterns = [
332 path('admin/', admin.site.urls),
333 path('', resume.views.home, name='resume'),
334]
335urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
336urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
337
338
339#views.py for resume
340from django.shortcuts import render
341from .models import Myself, Skill, Education, Job
342
343# Create your views here.
344def home(request):
345 me = Myself.objects
346 skill = Skill.objects.order_by('-comfort')
347 edu = Education.objects.order_by('-end_date')
348 job = Job.objects.order_by('-end_date')
349 return render(request, 'resume.html', {'me':me,'skill':skill, 'edu':edu, 'job':job})
350
351
352#template for home
353<!doctype html>
354<html lang="en">
355{% load static %}
356 <head>
357 <meta charset="utf-8">
358 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
359 <meta name="description" content="">
360 <meta name="author" content="">
361 <link rel="icon" href="../../../../favicon.ico">
362
363 <title>Brenden Price</title>
364
365 <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
366 </head>
367
368 <body>
369
370 <main role="main">
371
372 <section class="jumbotron text-center">
373 <div class="container">
374 <h1 class="jumbotron-heading">Brenden Price</h1>
375 <img src="{% static 'nick.jpg' %}" height="300" />
376 <p class="lead text-muted">I love programming and Django in particular!</p>
377 <p>
378 <a href="{% url 'resume' %}" class="btn btn-primary my-2">My Resume</a>
379 <a href="mailto:price.brenden01@gmail.com" class="btn btn-primary my-2">Email Me</a>
380 </p>
381 </div>
382 </section>
383
384 <div class="album py-5 bg-light">
385 <div class="container">
386
387 <div class="row">
388 {% for languages in languages.all %}
389
390 <div class="col-md-4">
391 <div class="card mb-4 box-shadow">
392 <a href="{% url 'language details' languages.id %}">
393 <img class="card-img-top" src="{{ languages.image.url }}">
394 </a>
395 <div class="card-body">
396 <center>
397 <a href="{% url 'language details' languages.id %}">
398 <p class="card-text">{{ languages.language }}</p>
399 </a>
400 </center>
401 </div>
402 </div>
403 </div>
404
405 {% endfor %}
406 </div>
407
408 </div>
409 </div>
410
411 </main>
412
413 <!-- Bootstrap core JavaScript
414 ================================================== -->
415 <!-- Placed at the end of the document so the pages load faster -->
416 <script src="{% static 'js/bootstrap.js' %}" ></script>
417 <script src="{% static 'jquery-3.3.1.min.js' %}" ></script>
418 <script src="https://unpkg.com/@popperjs/core@2"></script>
419 </body>
420</html>
421
422#template for language details
423
424<!doctype html>
425<html lang="en">
426{% load static %}
427 <head>
428 <meta charset="utf-8">
429 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
430 <meta name="description" content="">
431 <meta name="author" content="">
432 <link rel="icon" href="../../../../favicon.ico">
433
434 <title>Nick Walter</title>
435
436 <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
437 </head>
438
439 <body>
440
441 <main role="main">
442
443 <section class="jumbotron text-center">
444 <div class="container">
445 <h1 class="jumbotron-heading">{{ project_detail.job }}</h1>
446 <p class="lead text-muted">{{ project_detail.summary }}</p>
447 <img src="{{ project_detail.image.url }}" height="300" />
448 <p>
449 <a href="{% url 'home' %}" class="btn btn-primary my-2">Back</a>
450 </p>
451 </div>
452 </section>
453
454 <div class="album py-5 bg-light">
455 <div class="container">
456 <script src="{{project_detail.paste}}"></script>
457 </div>
458 </div>
459
460 </main>
461
462 <!-- Bootstrap core JavaScript
463 ================================================== -->
464 <!-- Placed at the end of the document so the pages load faster -->
465 <script src="{% static 'js/bootstrap.js' %}" ></script>
466 <script src="{% static 'jquery-3.3.1.min.js' %}" ></script>
467 </body>
468</html>
469
470#template for frameworks
471
472<!doctype html>
473<html lang="en">
474{% load static %}
475 <head>
476 <meta charset="utf-8">
477 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
478 <meta name="description" content="">
479 <meta name="author" content="">
480 <link rel="icon" href="../../../../favicon.ico">
481
482 <title>Brenden Price</title>
483
484 <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
485 </head>
486
487 <body>
488
489 <main role="main">
490
491 <section class="jumbotron text-center">
492 <div class="container">
493 <h1 class="jumbotron-heading">Brenden Price</h1>
494
495 <img src="{% static 'nick.jpg' %}" height="300" />
496 <p class="lead text-muted">{{languages.language}}</p>
497 <p>
498 <a href="{% url 'home' %}" class="btn btn-primary my-2">Back</a>
499 </p>
500 </div>
501 </section>
502
503 <div class="album py-5 bg-light">
504 <div class="container">
505
506 <div class="row">
507 {% for projects in projects.all %}
508 {% if projects.frameworks.framework == frameworks.framework %}
509 <div class="col-md-4">
510 <div class="card mb-4 box-shadow">
511 <a href="{% url 'framework project details' projects.id %}">
512 <img class="card-img-top" src="{{ projects.image.url }}">
513 </a>
514 <div class="card-body">
515 <center>
516 <p class="card-text">{{ projects.job }}</p>
517 </center>
518 <p class="card-text text-muted text-right">{{ projects.submissionDate }}</p>
519 </div>
520 </div>
521 </div>
522 {% endif %}
523 {% endfor %}
524 </div>
525
526 </div>
527 </div>
528
529 </main>
530
531 <!-- Bootstrap core JavaScript
532 ================================================== -->
533 <!-- Placed at the end of the document so the pages load faster -->
534 <script src="{% static 'js/bootstrap.js' %}" ></script>
535 <script src="{% static 'jquery-3.3.1.min.js' %}" ></script>
536 </body>
537</html>
538
539#template for project detail
540<!doctype html>
541<html lang="en">
542{% load static %}
543 <head>
544 <meta charset="utf-8">
545 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
546 <meta name="description" content="">
547 <meta name="author" content="">
548 <link rel="icon" href="../../../../favicon.ico">
549
550 <title>Nick Walter</title>
551
552 <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
553 </head>
554
555 <body>
556
557 <main role="main">
558
559 <section class="jumbotron text-center">
560 <div class="container">
561 <h1 class="jumbotron-heading">{{ project_detail.job }}</h1>
562 <p class="lead text-muted">{{ project_detail.summary }}</p>
563 <img src="{{ project_detail.image.url }}" height="300" />
564 <p>
565 <a href="{% url 'home' %}" class="btn btn-primary my-2">Back</a>
566 </p>
567 </div>
568 </section>
569
570 <div class="album py-5 bg-light">
571 <div class="container">
572 <script src="{{project_detail.paste}}"></script>
573 </div>
574 </div>
575
576 </main>
577
578 <!-- Bootstrap core JavaScript
579 ================================================== -->
580 <!-- Placed at the end of the document so the pages load faster -->
581 <script src="{% static 'js/bootstrap.js' %}" ></script>
582 <script src="{% static 'jquery-3.3.1.min.js' %}" ></script>
583 </body>
584</html>
585