From 0221a58e3a4717f18a764350fd5f3e2b340b7807 Mon Sep 17 00:00:00 2001
From: Chris Reilly <33557104+duckets615@users.noreply.github.com>
Date: Mon, 3 Dec 2018 18:22:09 -0500
Subject: [PATCH 1/6] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9203be49d..7f1197a10 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Intro to Django
-Fork this repo to use for your projects this week.
+Fork this repo to use for your projects this week
## Reading
From 91229b8dbc3699c24ba19253524158e369a107e7 Mon Sep 17 00:00:00 2001
From: Chris Reilly <33557104+duckets615@users.noreply.github.com>
Date: Tue, 4 Dec 2018 19:03:55 -0500
Subject: [PATCH 2/6] day 1 & 2 MVP
---
djorg/settings.py | 84 +++++++++++++++++++++
djorg/urls.py | 20 +++++
djorg/wsgi.py | 15 ++++
notes/admin.py | 4 +
notes/api.py | 26 +++++++
notes/apps.py | 3 +
notes/migrations/0001_initial.py | 36 +++++++++
notes/migrations/0002_auto_20181203_1835.py | 25 ++++++
notes/migrations/0003_personalnote.py | 24 ++++++
notes/migrations/__init__.py | 24 ++++++
notes/models.py | 17 +++++
notes/tests.py | 3 +
notes/views.py | 3 +
13 files changed, 284 insertions(+)
create mode 100644 djorg/settings.py
create mode 100644 djorg/urls.py
create mode 100644 djorg/wsgi.py
create mode 100644 notes/admin.py
create mode 100644 notes/api.py
create mode 100644 notes/apps.py
create mode 100644 notes/migrations/0001_initial.py
create mode 100644 notes/migrations/0002_auto_20181203_1835.py
create mode 100644 notes/migrations/0003_personalnote.py
create mode 100644 notes/migrations/__init__.py
create mode 100644 notes/models.py
create mode 100644 notes/tests.py
create mode 100644 notes/views.py
diff --git a/djorg/settings.py b/djorg/settings.py
new file mode 100644
index 000000000..422d8bf7a
--- /dev/null
+++ b/djorg/settings.py
@@ -0,0 +1,84 @@
+"""
+Django settings for djorg project.
+Generated by 'django-admin startproject' using Django 2.1.4.
+For more information on this file, see
+https://docs.djangoproject.com/en/2.1/topics/settings/
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.1/ref/settings/
+"""
+import os
+from decouple import config
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+SECRET_KEY = config('SECRET_KEY')
+DEBUG = config('DEBUG', cast=bool)
+ALLOWED_HOSTS = []
+INSTALLED_APPS = [
+ 'notes.apps.NotesConfig',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+]
+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 = 'djorg.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 = 'djorg.wsgi.application'
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+ }
+}
+
+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',
+ },
+]
+
+LANGUAGE_CODE = 'en-us'
+TIME_ZONE = 'UTC'
+USE_I18N = True
+USE_L10N = True
+USE_TZ = True
+
+STATIC_URL = '/static/'
diff --git a/djorg/urls.py b/djorg/urls.py
new file mode 100644
index 000000000..e46c54d54
--- /dev/null
+++ b/djorg/urls.py
@@ -0,0 +1,20 @@
+"""djorg URL Configuration
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/2.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
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+]
diff --git a/djorg/wsgi.py b/djorg/wsgi.py
new file mode 100644
index 000000000..c0038588d
--- /dev/null
+++ b/djorg/wsgi.py
@@ -0,0 +1,15 @@
+
+"""
+WSGI config for djorg 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/2.1/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djorg.settings')
+
+application = get_wsgi_application()
diff --git a/notes/admin.py b/notes/admin.py
new file mode 100644
index 000000000..a0677b0d8
--- /dev/null
+++ b/notes/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+from .models import Note, PersonalNote
+admin.site.register(Note)
+admin.site.register(PersonalNote)
diff --git a/notes/api.py b/notes/api.py
new file mode 100644
index 000000000..43e94ad4e
--- /dev/null
+++ b/notes/api.py
@@ -0,0 +1,26 @@
+from rest_framework import serializers, viewsets
+from .models import PersonalNote, Note
+
+class PersonalNoteSerializer(serializers.HyperlinkedModelSerializer):
+
+ class Meta:
+ model = PersonalNote
+ fields = ('title', 'content')
+
+ def create(self, validated_data):
+ user = self.context['request'].user
+ note = PersonalNote.objects.create(user=user, **validated_data)
+ return note
+
+class PersonalNoteViewSet(viewsets.ModelViewSet):
+ serializer_class = PersonalNoteSerializer
+ queryset = PersonalNote.objects.none()
+ def get_queryset(self):
+ user = self.request.user
+
+ if user.is_anonymous:
+ return PersonalNote.objects.none()
+ else:
+ return PersonalNote.objects.filter(user=user)
+
+
\ No newline at end of file
diff --git a/notes/apps.py b/notes/apps.py
new file mode 100644
index 000000000..6b4063143
--- /dev/null
+++ b/notes/apps.py
@@ -0,0 +1,3 @@
+from django.apps import AppConfig
+class NotesConfig(AppConfig):
+ name = 'notes'
diff --git a/notes/migrations/0001_initial.py b/notes/migrations/0001_initial.py
new file mode 100644
index 000000000..0ccdde160
--- /dev/null
+++ b/notes/migrations/0001_initial.py
@@ -0,0 +1,36 @@
+# Generated by Django 2.1.4 on 2018-12-04 04:32
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Note',
+ fields=[
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+ ('title', models.CharField(max_length=200)),
+ ('content', models.TextField(blank=True)),
+ ('created_at', models.DateTimeField(auto_now_add=True)),
+ ('last_modified', models.DateTimeField(auto_now=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PersonalNote',
+ fields=[
+ ('note_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='notes.Note')),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ ],
+ bases=('notes.note',),
+ ),
+ ]
diff --git a/notes/migrations/0002_auto_20181203_1835.py b/notes/migrations/0002_auto_20181203_1835.py
new file mode 100644
index 000000000..c13ba6616
--- /dev/null
+++ b/notes/migrations/0002_auto_20181203_1835.py
@@ -0,0 +1,25 @@
+# Generated by Django 2.1.4 on 2018-12-04 03:53
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('notes', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='note',
+ name='created_at',
+ field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='note',
+ name='last_modified',
+ field=models.DateTimeField(auto_now=True),
+ ),
+]
diff --git a/notes/migrations/0003_personalnote.py b/notes/migrations/0003_personalnote.py
new file mode 100644
index 000000000..8d63a135e
--- /dev/null
+++ b/notes/migrations/0003_personalnote.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.1.4 on 2018-12-04 04:14
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('notes', '0002_auto_20181203_1835'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='PersonalNote',
+ fields=[
+ ('note_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='notes.Note')),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ ],
+ bases=('notes.note',),
+ ),
+]
diff --git a/notes/migrations/__init__.py b/notes/migrations/__init__.py
new file mode 100644
index 000000000..8df327362
--- /dev/null
+++ b/notes/migrations/__init__.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.1.4 on 2018-12-04 01:32
+
+from django.db import migrations, models
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Note',
+ fields=[
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+ ('title', models.CharField(max_length=200)),
+ ('content', models.TextField(blank=True)),
+ ('pub_date', models.DateTimeField(verbose_name='date_published')),
+ ],
+ ),
+]
diff --git a/notes/models.py b/notes/models.py
new file mode 100644
index 000000000..d93c185de
--- /dev/null
+++ b/notes/models.py
@@ -0,0 +1,17 @@
+from django.db import models
+from uuid import uuid4
+from django.contrib.auth.models import User
+
+
+class Note(models.Model):
+ id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
+ title = models.CharField(max_length=200)
+ content = models.TextField(blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ last_modified = models.DateTimeField(auto_now=True)
+
+ def __str__(self):
+ return F"Title: {self.title}, Content: {self.content}"
+
+class PersonalNote(Note):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
diff --git a/notes/tests.py b/notes/tests.py
new file mode 100644
index 000000000..de8bdc00e
--- /dev/null
+++ b/notes/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/notes/views.py b/notes/views.py
new file mode 100644
index 000000000..c60c79043
--- /dev/null
+++ b/notes/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
From 2da75a9c6240075fb48b79cd4a809debed505947 Mon Sep 17 00:00:00 2001
From: Chris Reilly <33557104+duckets615@users.noreply.github.com>
Date: Wed, 5 Dec 2018 18:41:34 -0500
Subject: [PATCH 3/6] api cors setup
---
settings.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)
create mode 100644 settings.py
diff --git a/settings.py b/settings.py
new file mode 100644
index 000000000..49fd97e4f
--- /dev/null
+++ b/settings.py
@@ -0,0 +1,100 @@
+"""
+Django settings for djorg project.
+Generated by 'django-admin startproject' using Django 2.1.4.
+For more information on this file, see
+https://docs.djangoproject.com/en/2.1/topics/settings/
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.1/ref/settings/
+"""
+
+import os
+from decouple import config
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+SECRET_KEY = config('SECRET_KEY')
+
+DEBUG = config('DEBUG', cast=bool)
+
+ALLOWED_HOSTS = []
+
+INSTALLED_APPS = [
+ 'notes.apps.NotesConfig',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'rest_framework',
+]
+
+REST_FRAMEWORK = {
+ 'DEFAULT_PERMISSION_CLASSES': [
+ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
+ ]
+}
+
+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 = 'djorg.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 = 'djorg.wsgi.application'
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+ }
+}
+
+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',
+ },
+]
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+STATIC_URL = '/static/'
From 653969d9fecf0d850c12819e2cd03e37b32739e0 Mon Sep 17 00:00:00 2001
From: duckets615 <33557104+duckets615@users.noreply.github.com>
Date: Fri, 7 Dec 2018 08:55:35 -0500
Subject: [PATCH 4/6] Redo from scratch, all MVP complete with frontend
stretch, deploy time
---
Pipfile | 19 +
Pipfile.lock | 119 +
Procfile | 1 +
README.md | 2 +-
djorg/settings.py | 84 -
frontend/projecttracker/.gitignore | 21 +
frontend/projecttracker/README.md | 2567 +++++
frontend/projecttracker/package.json | 26 +
frontend/projecttracker/public/favicon.ico | Bin 0 -> 3870 bytes
frontend/projecttracker/public/index.html | 40 +
frontend/projecttracker/public/manifest.json | 15 +
frontend/projecttracker/src/App.css | 39 +
frontend/projecttracker/src/App.js | 37 +
frontend/projecttracker/src/index.css | 14 +
frontend/projecttracker/src/index.js | 12 +
frontend/projecttracker/src/logo.svg | 7 +
frontend/projecttracker/src/serviceWorker.js | 131 +
frontend/projecttracker/yarn.lock | 8514 +++++++++++++++++
manage.py | 15 +
notes/admin.py | 4 -
notes/api.py | 26 -
notes/apps.py | 3 -
notes/migrations/0001_initial.py | 36 -
notes/migrations/0003_personalnote.py | 24 -
projects/__init__.py | 0
projects/admin.py | 6 +
projects/api.py | 21 +
projects/apps.py | 5 +
.../migrations/0001_initial.py | 47 +-
.../migrations/0002_auto_20181207_2006.py | 27 +
.../migrations/0003_auto_20181207_2016.py | 50 +-
projects/migrations/__init__.py | 0
{notes => projects}/models.py | 32 +-
{notes => projects}/tests.py | 6 +-
{notes => projects}/views.py | 7 +-
requirements.txt | 9 +
stuffToLearn/__init__.py | 0
stuffToLearn/settings.py | 142 +
{djorg => stuffToLearn}/urls.py | 49 +-
{djorg => stuffToLearn}/wsgi.py | 31 +-
40 files changed, 11903 insertions(+), 285 deletions(-)
create mode 100644 Pipfile
create mode 100644 Pipfile.lock
create mode 100644 Procfile
delete mode 100644 djorg/settings.py
create mode 100644 frontend/projecttracker/.gitignore
create mode 100644 frontend/projecttracker/README.md
create mode 100644 frontend/projecttracker/package.json
create mode 100644 frontend/projecttracker/public/favicon.ico
create mode 100644 frontend/projecttracker/public/index.html
create mode 100644 frontend/projecttracker/public/manifest.json
create mode 100644 frontend/projecttracker/src/App.css
create mode 100644 frontend/projecttracker/src/App.js
create mode 100644 frontend/projecttracker/src/index.css
create mode 100644 frontend/projecttracker/src/index.js
create mode 100644 frontend/projecttracker/src/logo.svg
create mode 100644 frontend/projecttracker/src/serviceWorker.js
create mode 100644 frontend/projecttracker/yarn.lock
create mode 100644 manage.py
delete mode 100644 notes/admin.py
delete mode 100644 notes/api.py
delete mode 100644 notes/apps.py
delete mode 100644 notes/migrations/0001_initial.py
delete mode 100644 notes/migrations/0003_personalnote.py
create mode 100644 projects/__init__.py
create mode 100644 projects/admin.py
create mode 100644 projects/api.py
create mode 100644 projects/apps.py
rename notes/migrations/__init__.py => projects/migrations/0001_initial.py (76%)
create mode 100644 projects/migrations/0002_auto_20181207_2006.py
rename notes/migrations/0002_auto_20181203_1835.py => projects/migrations/0003_auto_20181207_2016.py (74%)
create mode 100644 projects/migrations/__init__.py
rename {notes => projects}/models.py (58%)
rename {notes => projects}/tests.py (95%)
rename {notes => projects}/views.py (95%)
create mode 100644 requirements.txt
create mode 100644 stuffToLearn/__init__.py
create mode 100644 stuffToLearn/settings.py
rename {djorg => stuffToLearn}/urls.py (63%)
rename {djorg => stuffToLearn}/wsgi.py (72%)
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 000000000..d23b0b663
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,19 @@
+[[source]]
+url = "https://pypi.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[packages]
+django = "*"
+python-decouple = "*"
+djangorestframework = "*"
+django-cors-headers = "*"
+gunicorn = "*"
+"psycopg2-binary" = "*"
+dj-database-url = "*"
+whitenoise = "*"
+
+[dev-packages]
+
+[requires]
+python_version = "3.7"
diff --git a/Pipfile.lock b/Pipfile.lock
new file mode 100644
index 000000000..12fd231ea
--- /dev/null
+++ b/Pipfile.lock
@@ -0,0 +1,119 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "8125b5bd02cb8f85c9f0329f5ff7548591ce4fb6ffbe9b3cb8cb0952d2f3cff2"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_version": "3.7"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "dj-database-url": {
+ "hashes": [
+ "sha256:4aeaeb1f573c74835b0686a2b46b85990571159ffc21aa57ecd4d1e1cb334163",
+ "sha256:851785365761ebe4994a921b433062309eb882fedd318e1b0fcecc607ed02da9"
+ ],
+ "index": "pypi",
+ "version": "==0.5.0"
+ },
+ "django": {
+ "hashes": [
+ "sha256:acdcc1f61fdb0a0c82a1d3bf1879a414e7732ea894a7632af7f6d66ec7ab5bb3",
+ "sha256:efbcad7ebb47daafbcead109b38a5bd519a3c3cd92c6ed0f691ff97fcdd16b45"
+ ],
+ "index": "pypi",
+ "version": "==2.1.2"
+ },
+ "django-cors-headers": {
+ "hashes": [
+ "sha256:5545009c9b233ea7e70da7dbab7cb1c12afa01279895086f98ec243d7eab46fa",
+ "sha256:c4c2ee97139d18541a1be7d96fe337d1694623816d83f53cb7c00da9b94acae1"
+ ],
+ "index": "pypi",
+ "version": "==2.4.0"
+ },
+ "djangorestframework": {
+ "hashes": [
+ "sha256:607865b0bb1598b153793892101d881466bd5a991de12bd6229abb18b1c86136",
+ "sha256:63f76cbe1e7d12b94c357d7e54401103b2e52aef0f7c1650d6c820ad708776e5"
+ ],
+ "index": "pypi",
+ "version": "==3.9.0"
+ },
+ "gunicorn": {
+ "hashes": [
+ "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
+ "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
+ ],
+ "index": "pypi",
+ "version": "==19.9.0"
+ },
+ "psycopg2-binary": {
+ "hashes": [
+ "sha256:04afb59bbbd2eab3148e6816beddc74348078b8c02a1113ea7f7822f5be4afe3",
+ "sha256:098b18f4d8857a8f9b206d1dc54db56c2255d5d26458917e7bcad61ebfe4338f",
+ "sha256:0bf855d4a7083e20ead961fda4923887094eaeace0ab2d76eb4aa300f4bbf5bd",
+ "sha256:197dda3ffd02057820be83fe4d84529ea70bf39a9a4daee1d20ffc74eb3d042e",
+ "sha256:278ef63afb4b3d842b4609f2c05ffbfb76795cf6a184deeb8707cd5ed3c981a5",
+ "sha256:3cbf8c4fc8f22f0817220891cf405831559f4d4c12c4f73913730a2ea6c47a47",
+ "sha256:4305aed922c4d9d6163ab3a41d80b5a1cfab54917467da8168552c42cad84d32",
+ "sha256:47ee296f704fb8b2a616dec691cdcfd5fa0f11943955e88faa98cbd1dc3b3e3d",
+ "sha256:4a0e38cb30457e70580903367161173d4a7d1381eb2f2cfe4e69b7806623f484",
+ "sha256:4d6c294c6638a71cafb82a37f182f24321f1163b08b5d5ca076e11fe838a3086",
+ "sha256:4f3233c366500730f839f92833194fd8f9a5c4529c8cd8040aa162c3740de8e5",
+ "sha256:5221f5a3f4ca2ddf0d58e8b8a32ca50948be9a43351fda797eb4e72d7a7aa34d",
+ "sha256:5c6ca0b507540a11eaf9e77dee4f07c131c2ec80ca0cffa146671bf690bc1c02",
+ "sha256:789bd89d71d704db2b3d5e67d6d518b158985d791d3b2dec5ab85457cfc9677b",
+ "sha256:7b94d29239efeaa6a967f3b5971bd0518d2a24edd1511edbf4a2c8b815220d07",
+ "sha256:89bc65ef3301c74cf32db25334421ea6adbe8f65601ea45dcaaf095abed910bb",
+ "sha256:89d6d3a549f405c20c9ae4dc94d7ed2de2fa77427a470674490a622070732e62",
+ "sha256:97521704ac7127d7d8ba22877da3c7bf4a40366587d238ec679ff38e33177498",
+ "sha256:a395b62d5f44ff6f633231abe568e2203b8fabf9797cd6386aa92497df912d9a",
+ "sha256:a6d32c37f714c3f34158f3fa659f3a8f2658d5f53c4297d45579b9677cc4d852",
+ "sha256:a89ee5c26f72f2d0d74b991ce49e42ddeb4ac0dc2d8c06a0f2770a1ab48f4fe0",
+ "sha256:b4c8b0ef3608e59317bfc501df84a61e48b5445d45f24d0391a24802de5f2d84",
+ "sha256:b5fcf07140219a1f71e18486b8dc28e2e1b76a441c19374805c617aa6d9a9d55",
+ "sha256:b86f527f00956ecebad6ab3bb30e3a75fedf1160a8716978dd8ce7adddedd86f",
+ "sha256:be4c4aa22ba22f70de36c98b06480e2f1697972d49eb20d525f400d204a6d272",
+ "sha256:c2ac7aa1a144d4e0e613ac7286dae85671e99fe7a1353954d4905629c36b811c",
+ "sha256:de26ef4787b5e778e8223913a3e50368b44e7480f83c76df1f51d23bd21cea16",
+ "sha256:e70ebcfc5372dc7b699c0110454fc4263967f30c55454397e5769eb72c0eb0ce",
+ "sha256:eadbd32b6bc48b67b0457fccc94c86f7ccc8178ab839f684eb285bb592dc143e",
+ "sha256:ecbc6dfff6db06b8b72ae8a2f25ff20fbdcb83cb543811a08f7cb555042aa729"
+ ],
+ "index": "pypi",
+ "version": "==2.7.5"
+ },
+ "python-decouple": {
+ "hashes": [
+ "sha256:1317df14b43efee4337a4aa02914bf004f010cd56d6c4bd894e6474ec8c4fe2d"
+ ],
+ "index": "pypi",
+ "version": "==3.1"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:642253af8eae734d1509fc6ac9c1aee5e5b69d76392660889979b9870610a46b",
+ "sha256:91e3ccf2c344ffaa6defba1ce7f38f97026943f675b7703f44789768e4cb0ece"
+ ],
+ "version": "==2018.6"
+ },
+ "whitenoise": {
+ "hashes": [
+ "sha256:133a92ff0ab8fb9509f77d4f7d0de493eca19c6fea973f4195d4184f888f2e02",
+ "sha256:32b57d193478908a48acb66bf73e7a3c18679263e3e64bfebcfac1144a430039"
+ ],
+ "index": "pypi",
+ "version": "==4.1"
+ }
+ },
+ "develop": {}
+}
diff --git a/Procfile b/Procfile
new file mode 100644
index 000000000..0fb2319fa
--- /dev/null
+++ b/Procfile
@@ -0,0 +1 @@
+web: gunicorn stuffToLearn.wsgi --log-file -
\ No newline at end of file
diff --git a/README.md b/README.md
index 7f1197a10..d3c04dcb2 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ Fork this repo to use for your projects this week
* [Day 1: Intro](guides/day1.md)
* [Day 2: Admin Interface and SQL](guides/day2.md)
* [Day 3: Setting up a RESTful API](guides/day3.md)
-* [Day 4: Token Auth for REST](guides/day4.md)
+* [Day 4 Token Auth for REST](guides/day4.md)
### External links
diff --git a/djorg/settings.py b/djorg/settings.py
deleted file mode 100644
index 422d8bf7a..000000000
--- a/djorg/settings.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-Django settings for djorg project.
-Generated by 'django-admin startproject' using Django 2.1.4.
-For more information on this file, see
-https://docs.djangoproject.com/en/2.1/topics/settings/
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/2.1/ref/settings/
-"""
-import os
-from decouple import config
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
-
-SECRET_KEY = config('SECRET_KEY')
-DEBUG = config('DEBUG', cast=bool)
-ALLOWED_HOSTS = []
-INSTALLED_APPS = [
- 'notes.apps.NotesConfig',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
-]
-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 = 'djorg.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 = 'djorg.wsgi.application'
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- }
-}
-
-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',
- },
-]
-
-LANGUAGE_CODE = 'en-us'
-TIME_ZONE = 'UTC'
-USE_I18N = True
-USE_L10N = True
-USE_TZ = True
-
-STATIC_URL = '/static/'
diff --git a/frontend/projecttracker/.gitignore b/frontend/projecttracker/.gitignore
new file mode 100644
index 000000000..f4917854e
--- /dev/null
+++ b/frontend/projecttracker/.gitignore
@@ -0,0 +1,21 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/frontend/projecttracker/README.md b/frontend/projecttracker/README.md
new file mode 100644
index 000000000..395038bb3
--- /dev/null
+++ b/frontend/projecttracker/README.md
@@ -0,0 +1,2567 @@
+This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
+
+Below you will find some information on how to perform common tasks.
+You can find the most recent version of this guide [here](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md).
+
+## Table of Contents
+
+- [Updating to New Releases](#updating-to-new-releases)
+- [Sending Feedback](#sending-feedback)
+- [Folder Structure](#folder-structure)
+- [Available Scripts](#available-scripts)
+ - [npm start](#npm-start)
+ - [npm test](#npm-test)
+ - [npm run build](#npm-run-build)
+ - [npm run eject](#npm-run-eject)
+- [Supported Browsers](#supported-browsers)
+- [Supported Language Features](#supported-language-features)
+- [Syntax Highlighting in the Editor](#syntax-highlighting-in-the-editor)
+- [Displaying Lint Output in the Editor](#displaying-lint-output-in-the-editor)
+- [Debugging in the Editor](#debugging-in-the-editor)
+- [Formatting Code Automatically](#formatting-code-automatically)
+- [Changing the Page `