diff --git a/jessica_hart/assignments/Django/courses/apps/__init__.py b/jessica_hart/assignments/Django/courses/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/courses/apps/__init__.pyc b/jessica_hart/assignments/Django/courses/apps/__init__.pyc new file mode 100644 index 0000000..a8a43e5 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/__init__.py b/jessica_hart/assignments/Django/courses/apps/main_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/__init__.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/__init__.pyc new file mode 100644 index 0000000..80b2c8a Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/admin.py b/jessica_hart/assignments/Django/courses/apps/main_app/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/admin.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/admin.pyc new file mode 100644 index 0000000..1c5721e Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/admin.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/apps.py b/jessica_hart/assignments/Django/courses/apps/main_app/apps.py new file mode 100644 index 0000000..feab95d --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/apps.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class MainAppConfig(AppConfig): + name = 'main_app' diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.py b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.py new file mode 100644 index 0000000..808147e --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-20 01:02 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='Course', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='Description', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField(default='N/A')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('course', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='desc', to='main_app.Course')), + ], + ), + migrations.AddField( + model_name='comment', + name='course_id', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='main_app.Course'), + ), + ] diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.pyc new file mode 100644 index 0000000..9014afe Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0001_initial.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.py b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.py new file mode 100644 index 0000000..2faea1c --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-20 01:05 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main_app', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='comment', + name='course_id', + ), + migrations.RemoveField( + model_name='description', + name='course', + ), + migrations.AddField( + model_name='course', + name='desc', + field=models.CharField(default='NA', max_length=400), + preserve_default=False, + ), + migrations.DeleteModel( + name='Comment', + ), + migrations.DeleteModel( + name='Description', + ), + ] diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.pyc new file mode 100644 index 0000000..687afe4 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0002_auto_20170320_0105.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.py b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.py new file mode 100644 index 0000000..76e8836 --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-20 01:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main_app', '0002_auto_20170320_0105'), + ] + + operations = [ + migrations.AlterField( + model_name='course', + name='desc', + field=models.CharField(default='N/A', max_length=400), + ), + ] diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.pyc new file mode 100644 index 0000000..7d21ea0 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/0003_auto_20170320_0112.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/__init__.py b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/migrations/__init__.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/__init__.pyc new file mode 100644 index 0000000..525f619 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/migrations/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/models.py b/jessica_hart/assignments/Django/courses/apps/main_app/models.py new file mode 100644 index 0000000..cf96968 --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/models.py @@ -0,0 +1,31 @@ +from __future__ import unicode_literals +from django.db import models + +class Course(models.Model): + name = models.CharField(max_length = 200) + desc = models.CharField(max_length = 400, default = 'N/A') + created_at = models.DateTimeField(auto_now_add = True) + updated_at = models.DateTimeField(auto_now = True) + + def __str__(self): # By default return the course name + return self.name + +# # Make Description a one-to-one relationship with the Course table rather than a column +# class Description(models.Model): +# course = models.OneToOneField(Course, related_name = 'desc') +# text = models.TextField(default = 'N/A') +# created_at = models.DateTimeField(auto_now_add = True) +# updated_at = models.DateTimeField(auto_now = True) +# +# def __str__(self): # By default return the description text +# return self.text +# +# # Add comments about the courses that will be rendered on a separate page +# class Comment(models.Model): +# course_id = models.ForeignKey(Course, related_name = 'comments') +# text = models.TextField() +# created_at = models.DateTimeField(auto_now_add = True) +# updated_at = models.DateTimeField(auto_now = True) +# +# def __str__(self): # By default return the comment text +# return self.text diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/models.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/models.pyc new file mode 100644 index 0000000..7f529f7 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/models.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/static/main_app/css/style.css b/jessica_hart/assignments/Django/courses/apps/main_app/static/main_app/css/style.css new file mode 100644 index 0000000..3db700f --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/static/main_app/css/style.css @@ -0,0 +1,186 @@ +@import url(http://fonts.googleapis.com/css?family=Roboto:400,500,700,300,100); +* { + padding: 0px; + margin: 0px; +} +body { + background-color: #3e94ec; + font-family: "Roboto", helvetica, arial, sans-serif; + font-size: 16px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +#wrapper { + margin: 50px auto; + width: 960px; +} +#content { + background: rgba(255,255,255,0.15); + border: 1px solid rgba(255,255,255,0.25); + border-radius: 4px; + padding: 20px; +} +#form { + color: #1B1E24; + display: block; + margin-bottom: 20px; + text-align: top; +} +#form .col { + display: inline-block; + padding-right: 20px; + vertical-align: top; +} +#form .col:last-child { + width: 400px; +} +#form li { + display: block; + margin: 8px 5px 25px 0px; +} +#buttons { + display: block; + text-align: center; +} +#buttons input[type=submit] { + float: none; + margin-left: 20px; +} +h1 { + color: #fafafa; + font-size: 30px; + font-style: normal; + font-weight: 300; +} +h1, ul { + margin-bottom: 15px; +} + +a { + color: #1B1E24; +} +input[type=text] { + width: 95.5%; +} +textarea { + width: 96%; +} +input[type=text], textarea { + font-size: 14px; + margin: 5px; + padding: 5px; +} +input[type=submit] { + color:#1B1E24; + font-weight: 300; + font-size:16px; + float: right; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); + padding: 8px 12px; + background-color: #EBEBEB; + border: 2px solid #9EA7AF; + border-radius: 3px; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +input[type=submit]:hover { + color: #fafafa; + background-color: #4E5066; + border: 2px solid #1B1E24; +} +/* ====================== + Messages Block +====================== */ +.messages li { + color: #fafafa; + display: block; + border: 1px solid rgba(255,255,255,0.25); + border-radius: 4px; + padding: 10px; + text-align: center; +} +.success { + background-color: #66cc91; +} +.error { + background-color: #e74c3c; +} +/* ====================== + Tables Styles +====================== */ +/** Table Styles from http://codepen.io/alassetter/pen/cyrfB **/ +table { + background: white; + border-radius: 3px; + border-collapse: collapse; + padding: 5px; + width: 100%; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); + animation: float 5s infinite; +} +th { + color: #D5DDE5; + background: #1b1e24; + border-bottom:4px solid #9ea7af; + border-right: 1px solid #343a45; + font-size:23px; + font-weight: 100; + padding:24px; + text-align:left; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + vertical-align: middle; +} +th:first-child { + border-top-left-radius:3px; +} +th:last-child { + border-top-right-radius:3px; + border-right:none; +} +tr { + border-top: 1px solid #C1C3D1; + border-bottom-: 1px solid #C1C3D1; + color:#666B85; + font-size:16px; + font-weight:normal; + text-shadow: 0 1px 1px rgba(256, 256, 256, 0.1); +} +tr:hover td { + background:#4E5066; + color:#FFFFFF; + border-top: 1px solid #22262e; + border-bottom: 1px solid #22262e; +} +tr:hover td a { + color: #C1C3D1; +} +tr:first-child { + border-top:none; +} +tr:last-child { + border-bottom:none; +} +tr:nth-child(odd) td { + background:#EBEBEB; +} +tr:nth-child(odd):hover td { + background:#4E5066; +} +tr:last-child td:first-child { + border-bottom-left-radius:3px; +} +tr:last-child td:last-child { + border-bottom-right-radius:3px; +} +td { + background:#FFFFFF; + padding:20px; + text-align:left; + vertical-align:middle; + font-weight:300; + font-size:18px; + text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1); + border-right: 1px solid #C1C3D1; +} +td:last-child { + border-right: 0px; +} diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/base.html b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/base.html new file mode 100644 index 0000000..e0c753b --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/base.html @@ -0,0 +1,24 @@ + + + {% load staticfiles %} + + + Courses + + + +
+ {% if messages %} + + {% endif %} +
+ {% block content %} + {% endblock %} +
+
+ + diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/destroy.html b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/destroy.html new file mode 100644 index 0000000..6c5b09f --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/destroy.html @@ -0,0 +1,26 @@ +{% extends 'main_app/base.html' %} + +{% block content %} +

Are you sure you want to delete the following course?

+
+
+ {% csrf_token %} +
+
    +
  • Name:
  • +
  • Description:
  • +
+
+
+
    +
  • {{ course }}
  • +
  • {{ course.desc }}
  • +
+
+
+ + +
+
+
+{% endblock %} diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/index.html b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/index.html new file mode 100644 index 0000000..9442aec --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/templates/main_app/index.html @@ -0,0 +1,53 @@ +{% extends 'main_app/base.html' %} + +{% block content %} +

Add a New Course

+
+
+ {% csrf_token %} +
+
    +
  • Name:
  • +
  • Description:
  • +
+
+
+ + + +
+
+
+

Courses

+ + + + + + + + + + + {% for course in course_list %} + + + + + + + + {% endfor %} + +
Course NameDescriptionDate AddedActions
{{ course }}{{ course.desc }}{{ course.created_at }} +
+ {% csrf_token %} + remove +
+
+{% endblock %} diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/tests.py b/jessica_hart/assignments/Django/courses/apps/main_app/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/urls.py b/jessica_hart/assignments/Django/courses/apps/main_app/urls.py new file mode 100644 index 0000000..344f84d --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import url +from . import views + +def index(request): + pass + +urlpatterns = [ + url(r'^$', views.index), + url(r'^add$', views.add), + url(r'^courses/destroy/(?P\w+)$', views.destroy), + url(r'^courses/destroy/confirm/(?P\w+)$', views.destroy_confirm) +] diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/urls.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/urls.pyc new file mode 100644 index 0000000..4fdd80f Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/urls.pyc differ diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/views.py b/jessica_hart/assignments/Django/courses/apps/main_app/views.py new file mode 100644 index 0000000..18db896 --- /dev/null +++ b/jessica_hart/assignments/Django/courses/apps/main_app/views.py @@ -0,0 +1,40 @@ +from django.shortcuts import render, redirect, HttpResponse +from django.contrib import messages +from .models import Course + +def index(request): + context = { + 'course_list': Course.objects.all() + } + print context + return render(request, 'main_app/index.html', context) + +def add(request): + if request.method == 'POST': + print request.POST + if not request.POST['name']: + messages.error(request, 'Please enter a valid course name.') + return redirect('/') + Course.objects.create(name=request.POST['name'], desc=request.POST['desc']) + print 'Course added to database' + messages.success(request, 'The course has been successfully added.') + return redirect('/') + +def destroy(request, id): + if request.method == 'POST': + context = { + 'course': Course.objects.get(id=id) + } + print context + messages.error(request, 'WARNING: Deleted courses cannot be undone.') + return render(request, 'main_app/destroy.html', context) + return redirect('/') + +def destroy_confirm(request, id): + if request.method == 'POST': + if request.POST['action'] == 'No': + return redirect('/') + else: + Course.objects.get(id=id).delete() + messages.success(request, 'The course has been successfully removed.') + return redirect('/') diff --git a/jessica_hart/assignments/Django/courses/apps/main_app/views.pyc b/jessica_hart/assignments/Django/courses/apps/main_app/views.pyc new file mode 100644 index 0000000..3777b04 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/apps/main_app/views.pyc differ diff --git a/jessica_hart/assignments/Django/courses/courses/__init__.py b/jessica_hart/assignments/Django/courses/courses/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/courses/courses/__init__.pyc b/jessica_hart/assignments/Django/courses/courses/__init__.pyc new file mode 100644 index 0000000..506ced3 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/courses/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/courses/courses/settings.py b/jessica_hart/assignments/Django/courses/courses/settings.py new file mode 100644 index 0000000..62c17a8 --- /dev/null +++ b/jessica_hart/assignments/Django/courses/courses/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for courses project. + +Generated by 'django-admin startproject' using Django 1.10.6. + +For more information on this file, see +https://docs.djangoproject.com/en/1.10/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.10/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'rt0sewo2miv47c6!^k-yvxc60fqusf#k*rmi=dg9bu@x%es7*j' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.main_app', + '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 = 'courses.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 = 'courses.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.10/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.10/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/1.10/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/1.10/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/jessica_hart/assignments/Django/courses/courses/settings.pyc b/jessica_hart/assignments/Django/courses/courses/settings.pyc new file mode 100644 index 0000000..78450bb Binary files /dev/null and b/jessica_hart/assignments/Django/courses/courses/settings.pyc differ diff --git a/jessica_hart/assignments/Django/courses/courses/urls.py b/jessica_hart/assignments/Django/courses/courses/urls.py new file mode 100644 index 0000000..e371196 --- /dev/null +++ b/jessica_hart/assignments/Django/courses/courses/urls.py @@ -0,0 +1,22 @@ +"""courses URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.10/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +#from django.contrib import admin + +urlpatterns = [ + #url(r'^admin/', admin.site.urls), + url(r'^', include('apps.main_app.urls')) +] diff --git a/jessica_hart/assignments/Django/courses/courses/urls.pyc b/jessica_hart/assignments/Django/courses/courses/urls.pyc new file mode 100644 index 0000000..6947326 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/courses/urls.pyc differ diff --git a/jessica_hart/assignments/Django/courses/courses/wsgi.py b/jessica_hart/assignments/Django/courses/courses/wsgi.py new file mode 100644 index 0000000..9da3dff --- /dev/null +++ b/jessica_hart/assignments/Django/courses/courses/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for courses 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/1.10/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "courses.settings") + +application = get_wsgi_application() diff --git a/jessica_hart/assignments/Django/courses/courses/wsgi.pyc b/jessica_hart/assignments/Django/courses/courses/wsgi.pyc new file mode 100644 index 0000000..1e6da16 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/courses/wsgi.pyc differ diff --git a/jessica_hart/assignments/Django/courses/db.sqlite3 b/jessica_hart/assignments/Django/courses/db.sqlite3 new file mode 100644 index 0000000..3ab9a91 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/db.sqlite3 differ diff --git a/jessica_hart/assignments/Django/courses/manage.py b/jessica_hart/assignments/Django/courses/manage.py new file mode 100755 index 0000000..7594c9c --- /dev/null +++ b/jessica_hart/assignments/Django/courses/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "courses.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + 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?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/jessica_hart/assignments/Django/courses/mvc-courses.png b/jessica_hart/assignments/Django/courses/mvc-courses.png new file mode 100644 index 0000000..7b68cd8 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/mvc-courses.png differ diff --git a/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-1490017227839.png b/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-1490017227839.png new file mode 100644 index 0000000..8147ff9 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-1490017227839.png differ diff --git a/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-courses-destroy-5-1490017243210.png b/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-courses-destroy-5-1490017243210.png new file mode 100644 index 0000000..0a41fa1 Binary files /dev/null and b/jessica_hart/assignments/Django/courses/screenshot-127-0-0-1-8000-courses-destroy-5-1490017243210.png differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/__init__.py b/jessica_hart/assignments/Django/email_validation/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/email_validation/apps/__init__.pyc b/jessica_hart/assignments/Django/email_validation/apps/__init__.pyc new file mode 100644 index 0000000..f3f4cf5 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/__init__.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/__init__.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/__init__.pyc new file mode 100644 index 0000000..4eae723 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.pyc new file mode 100644 index 0000000..a2f6ac0 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/admin.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/apps.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/apps.py new file mode 100644 index 0000000..feab95d --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/apps.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class MainAppConfig(AppConfig): + name = 'main_app' diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.py new file mode 100644 index 0000000..3b9d36e --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-20 20:41 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Email', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('address', models.CharField(max_length=200)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.pyc new file mode 100644 index 0000000..c4400b4 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/0001_initial.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/__init__.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/__init__.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/__init__.pyc new file mode 100644 index 0000000..d840d25 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/migrations/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/models.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/models.py new file mode 100644 index 0000000..8c5013f --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/models.py @@ -0,0 +1,22 @@ +from __future__ import unicode_literals +from django.db import models +import re + +EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$') + +class UserManager(models.Manager): + def validate(self, postData): + if len(postData) < 1 or not EMAIL_REGEX.match(postData): + return 0 + else: + return 1 + +class Email(models.Model): + address = models.CharField(max_length = 200) + created_at = models.DateTimeField(auto_now_add = True) + updated_at = models.DateTimeField(auto_now = True) + + objects = UserManager() + + def __str__(self): # By default return the email address + return self.address diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/models.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/models.pyc new file mode 100644 index 0000000..6fd17d1 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/models.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/static/main_app/css/style.css b/jessica_hart/assignments/Django/email_validation/apps/main_app/static/main_app/css/style.css new file mode 100644 index 0000000..507d347 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/static/main_app/css/style.css @@ -0,0 +1,65 @@ +@import url(http://fonts.googleapis.com/css?family=Roboto:400,500,700,300,100); +* { + padding: 0px; + margin: 0px; +} +body { + background-color: #3e94ec; + font-family: "Roboto", helvetica, arial, sans-serif; + font-size: 16px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +#wrapper { + margin: 50px auto; + width: 540px; +} +#content { + background: rgba(255,255,255,0.15); + border: 1px solid rgba(255,255,255,0.25); + border-radius: 4px; + padding: 20px; +} +h1 { + color: #fafafa; + font-size: 30px; + font-style: normal; + font-weight: 300; +} +h1, ul { + margin-bottom: 15px; +} +#content li { + display: inline-block; + padding: 5px 0px; + width: 40%; +} +#content li.remove { + width: 80px; +} +a { + color: #1B1E24; +} +input[type=text] { + font-size: 14px; + margin: 5px 0px; + padding: 5px; + width: 95%; +} +/* ====================== +Messages Block +====================== */ +.messages li { + color: #fafafa; + display: block; + border: 1px solid rgba(255,255,255,0.25); + border-radius: 4px; + padding: 10px; + text-align: center; +} +.success { + background-color: #66cc91; +} +.error { + background-color: #e74c3c; +} diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/base.html b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/base.html new file mode 100644 index 0000000..3399dbf --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/base.html @@ -0,0 +1,24 @@ + + + {% load staticfiles %} + + + Email Validation + + + +
+ {% if messages %} +
    + {% for message in messages %} + {{ message }} + {% endfor %} +
+ {% endif %} +
+ {% block content %} + {% endblock %} +
+
+ + diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/index.html b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/index.html new file mode 100644 index 0000000..2923a0b --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/index.html @@ -0,0 +1,11 @@ +{% extends 'main_app/base.html' %} + +{% block content %} +

Register Email

+
+ {% csrf_token %} + + + +
+{% endblock %} diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/success.html b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/success.html new file mode 100644 index 0000000..2d679f7 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/templates/main_app/success.html @@ -0,0 +1,17 @@ +{% extends 'main_app/base.html' %} + +{% block content %} +

Email Addresses Entered:

+ +{% endblock %} diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/tests.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.py new file mode 100644 index 0000000..554cf0b --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import url +from . import views + +def index(request): + pass + +urlpatterns = [ + url(r'^$', views.index), + url(r'^add$', views.add), + url(r'^success$', views.success), + url(r'^remove/(?P\w+)$', views.remove) +] diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.pyc new file mode 100644 index 0000000..a1980ca Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/urls.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/views.py b/jessica_hart/assignments/Django/email_validation/apps/main_app/views.py new file mode 100644 index 0000000..9885b39 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/apps/main_app/views.py @@ -0,0 +1,30 @@ +from django.shortcuts import render, redirect +from django.contrib import messages +from .models import Email + +def index(request): + return render(request, 'main_app/index.html') + +def add(request): + if request.method == 'POST': + print request.POST + if Email.objects.validate(request.POST['email']): + Email.objects.create(address=request.POST['email']) + messages.success(request, 'The email address you entered ({}) is a VALID email address. Thank you.'.format(request.POST['email'])) + return redirect('/success') + else: + messages.error(request, 'Please enter a valid email.') + return redirect('/') + +def success(request): + context = { + 'emails': Email.objects.all() + } + print context + return render(request, 'main_app/success.html', context) + +def remove(request, id): + if request.method == 'POST': + Email.objects.get(id=id).delete() + messages.success(request, 'The email has been successfully removed.') + return redirect('/') diff --git a/jessica_hart/assignments/Django/email_validation/apps/main_app/views.pyc b/jessica_hart/assignments/Django/email_validation/apps/main_app/views.pyc new file mode 100644 index 0000000..8a8cc9c Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/apps/main_app/views.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/db.sqlite3 b/jessica_hart/assignments/Django/email_validation/db.sqlite3 new file mode 100644 index 0000000..4900f18 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/db.sqlite3 differ diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/__init__.py b/jessica_hart/assignments/Django/email_validation/email_validation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/__init__.pyc b/jessica_hart/assignments/Django/email_validation/email_validation/__init__.pyc new file mode 100644 index 0000000..bd3940e Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/email_validation/__init__.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/settings.py b/jessica_hart/assignments/Django/email_validation/email_validation/settings.py new file mode 100644 index 0000000..b0a41c8 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/email_validation/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for email_validation project. + +Generated by 'django-admin startproject' using Django 1.10.6. + +For more information on this file, see +https://docs.djangoproject.com/en/1.10/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.10/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '!!bxw6g^=wz_33iijt7ba+mm3!c7!mm#dd*d1&t1=6@^$pr_1%' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'apps.main_app', + '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 = 'email_validation.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 = 'email_validation.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.10/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.10/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/1.10/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'America/Chicago' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.10/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/settings.pyc b/jessica_hart/assignments/Django/email_validation/email_validation/settings.pyc new file mode 100644 index 0000000..1c542e1 Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/email_validation/settings.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/urls.py b/jessica_hart/assignments/Django/email_validation/email_validation/urls.py new file mode 100644 index 0000000..e37db13 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/email_validation/urls.py @@ -0,0 +1,22 @@ +"""email_validation URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.10/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +#from django.contrib import admin + +urlpatterns = [ + #url(r'^admin/', admin.site.urls), + url(r'^', include('apps.main_app.urls')) +] diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/urls.pyc b/jessica_hart/assignments/Django/email_validation/email_validation/urls.pyc new file mode 100644 index 0000000..cb486cc Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/email_validation/urls.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.py b/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.py new file mode 100644 index 0000000..49e5516 --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for email_validation 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/1.10/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "email_validation.settings") + +application = get_wsgi_application() diff --git a/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.pyc b/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.pyc new file mode 100644 index 0000000..d5f2dbd Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/email_validation/wsgi.pyc differ diff --git a/jessica_hart/assignments/Django/email_validation/manage.py b/jessica_hart/assignments/Django/email_validation/manage.py new file mode 100755 index 0000000..4fe4a7c --- /dev/null +++ b/jessica_hart/assignments/Django/email_validation/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "email_validation.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + 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?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-1490102608457.png b/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-1490102608457.png new file mode 100644 index 0000000..ef8929d Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-1490102608457.png differ diff --git a/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-success-1490102591095.png b/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-success-1490102591095.png new file mode 100644 index 0000000..2b9560e Binary files /dev/null and b/jessica_hart/assignments/Django/email_validation/screenshot-127-0-0-1-8000-success-1490102591095.png differ