From aafbbac632719639f7df166dce10c0363a2c7ee7 Mon Sep 17 00:00:00 2001 From: Richard Date: Tue, 4 Jan 2022 18:54:24 -0600 Subject: [PATCH] django lab-01 --- Code/Richard/django/lab-01/manage.py | 22 + .../django/lab-01/todo_app/__init__.py | 0 Code/Richard/django/lab-01/todo_app/admin.py | 7 + Code/Richard/django/lab-01/todo_app/apps.py | 6 + .../todo_app/migrations/0001_initial.py | 31 ++ .../lab-01/todo_app/migrations/__init__.py | 0 Code/Richard/django/lab-01/todo_app/models.py | 23 + .../lab-01/todo_app/static/normalize.css | 431 ++++++++++++++++++ .../todo_app/templates/todo_app/home.html | 57 +++ Code/Richard/django/lab-01/todo_app/tests.py | 3 + Code/Richard/django/lab-01/todo_app/urls.py | 8 + Code/Richard/django/lab-01/todo_app/views.py | 33 ++ .../django/lab-01/todo_project/__init__.py | 0 .../django/lab-01/todo_project/asgi.py | 16 + .../django/lab-01/todo_project/settings.py | 124 +++++ .../django/lab-01/todo_project/urls.py | 22 + .../django/lab-01/todo_project/wsgi.py | 16 + 17 files changed, 799 insertions(+) create mode 100644 Code/Richard/django/lab-01/manage.py create mode 100644 Code/Richard/django/lab-01/todo_app/__init__.py create mode 100644 Code/Richard/django/lab-01/todo_app/admin.py create mode 100644 Code/Richard/django/lab-01/todo_app/apps.py create mode 100644 Code/Richard/django/lab-01/todo_app/migrations/0001_initial.py create mode 100644 Code/Richard/django/lab-01/todo_app/migrations/__init__.py create mode 100644 Code/Richard/django/lab-01/todo_app/models.py create mode 100644 Code/Richard/django/lab-01/todo_app/static/normalize.css create mode 100644 Code/Richard/django/lab-01/todo_app/templates/todo_app/home.html create mode 100644 Code/Richard/django/lab-01/todo_app/tests.py create mode 100644 Code/Richard/django/lab-01/todo_app/urls.py create mode 100644 Code/Richard/django/lab-01/todo_app/views.py create mode 100644 Code/Richard/django/lab-01/todo_project/__init__.py create mode 100644 Code/Richard/django/lab-01/todo_project/asgi.py create mode 100644 Code/Richard/django/lab-01/todo_project/settings.py create mode 100644 Code/Richard/django/lab-01/todo_project/urls.py create mode 100644 Code/Richard/django/lab-01/todo_project/wsgi.py diff --git a/Code/Richard/django/lab-01/manage.py b/Code/Richard/django/lab-01/manage.py new file mode 100644 index 00000000..1d0193af --- /dev/null +++ b/Code/Richard/django/lab-01/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'todo_project.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/Code/Richard/django/lab-01/todo_app/__init__.py b/Code/Richard/django/lab-01/todo_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/Richard/django/lab-01/todo_app/admin.py b/Code/Richard/django/lab-01/todo_app/admin.py new file mode 100644 index 00000000..cbf0c4b4 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import Priority, TodoItem + +# Register your models here. + +admin.site.register(Priority), +admin.site.register(TodoItem) \ No newline at end of file diff --git a/Code/Richard/django/lab-01/todo_app/apps.py b/Code/Richard/django/lab-01/todo_app/apps.py new file mode 100644 index 00000000..d8f1498d --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TodoAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'todo_app' diff --git a/Code/Richard/django/lab-01/todo_app/migrations/0001_initial.py b/Code/Richard/django/lab-01/todo_app/migrations/0001_initial.py new file mode 100644 index 00000000..68d6a197 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# Generated by Django 4.0 on 2021-12-31 02:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Priority', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20)), + ], + ), + migrations.CreateModel( + name='TodoItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('todo_item_text', models.CharField(max_length=200)), + ('created_date', models.DateTimeField(auto_now_add=True)), + ('priority', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='todoitems', to='todo_app.priority')), + ], + ), + ] diff --git a/Code/Richard/django/lab-01/todo_app/migrations/__init__.py b/Code/Richard/django/lab-01/todo_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/Richard/django/lab-01/todo_app/models.py b/Code/Richard/django/lab-01/todo_app/models.py new file mode 100644 index 00000000..0b981a9e --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/models.py @@ -0,0 +1,23 @@ +from django.db import models +from django.db.models.deletion import CASCADE +from django.db.models.fields import CharField +from django.db.models.fields.related import ForeignKey + +# Create your models here. + + +class Priority(models.Model): + name = CharField(max_length=20) + + def __str__(self): + return self.name + + +class TodoItem(models.Model): + todo_item_text = models.CharField(max_length=200) + priority = models.ForeignKey(Priority, on_delete=CASCADE, related_name='todoitems') + + created_date = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"{self.todo_item_text}/n {self.priority} {self.created_date}" diff --git a/Code/Richard/django/lab-01/todo_app/static/normalize.css b/Code/Richard/django/lab-01/todo_app/static/normalize.css new file mode 100644 index 00000000..3c1b6242 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/static/normalize.css @@ -0,0 +1,431 @@ +/* Document + * ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + + /* Sections + * ========================================================================== */ + + /** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Edge, Firefox, and Safari. + */ + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + /* Grouping content + * ========================================================================== */ + + /** + * Remove the margin on nested lists in Chrome, Edge, IE, and Safari. + */ + + dl dl, + dl ol, + dl ul, + ol dl, + ul dl { + margin: 0; + } + + /** + * Remove the margin on nested lists in Edge 18- and IE. + */ + + ol ol, + ol ul, + ul ol, + ul ul { + margin: 0; + } + + /** + * 1. Add the correct box sizing in Firefox. + * 2. Correct the inheritance of border color in Firefox. + * 3. Show the overflow in Edge 18- and IE. + */ + + hr { + box-sizing: content-box; /* 1 */ + color: inherit; /* 2 */ + height: 0; /* 1 */ + overflow: visible; /* 3 */ + } + + /** + * Add the correct display in IE. + */ + + main { + display: block; + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /* Text-level semantics + * ========================================================================== */ + + /** + * Remove the gray background on active links in IE 10. + */ + + a { + background-color: transparent; + } + + /** + * Add the correct text decoration in Edge 18-, IE, and Safari. + */ + + abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + } + + /** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + + b, + strong { + font-weight: bolder; + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + code, + kbd, + samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /** + * Add the correct font size in all browsers. + */ + + small { + font-size: 80%; + } + + /* Embedded content + * ========================================================================== */ + + /** + * Add the correct display in IE 9-. + */ + + audio, + video { + display: inline-block; + } + + /** + * Add the correct display in iOS 4-7. + */ + + audio:not([controls]) { + display: none; + height: 0; + } + + /** + * Remove the border on images within links in IE 10-. + */ + + img { + border-style: none; + } + + /** + * Hide the overflow in IE. + */ + + svg:not(:root) { + overflow: hidden; + } + + /* Tabular data + * ========================================================================== */ + + /** + * 1. Correct table border color inheritance in all Chrome, Edge, and Safari. + * 2. Remove text indentation from table contents in Chrome, Edge, and Safari. + */ + + table { + border-color: inherit; /* 1 */ + text-indent: 0; /* 2 */ + } + + /* Forms + * ========================================================================== */ + + /** + * Remove the margin on controls in Safari. + */ + + button, + input, + select { + margin: 0; + } + + /** + * 1. Show the overflow in IE. + * 2. Remove the inheritance of text transform in Edge 18-, Firefox, and IE. + */ + + button { + overflow: visible; /* 1 */ + text-transform: none; /* 2 */ + } + + /** + * Correct the inability to style buttons in iOS and Safari. + */ + + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + + /** + * Correct the padding in Firefox. + */ + + fieldset { + padding: 0.35em 0.75em 0.625em; + } + + /** + * Show the overflow in Edge 18- and IE. + */ + + input { + overflow: visible; + } + + /** + * 1. Correct the text wrapping in Edge 18- and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + */ + + legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + white-space: normal; /* 1 */ + } + + /** + * 1. Add the correct display in Edge 18- and IE. + * 2. Add the correct vertical alignment in Chrome, Edge, and Firefox. + */ + + progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ + } + + /** + * Remove the inheritance of text transform in Firefox. + */ + + select { + text-transform: none; + } + + /** + * 1. Remove the margin in Firefox and Safari. + * 2. Remove the default vertical scrollbar in IE. + */ + + textarea { + margin: 0; /* 1 */ + overflow: auto; /* 2 */ + } + + /** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + + [type="checkbox"], + [type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + /** + * 1. Correct the odd appearance in Chrome, Edge, and Safari. + * 2. Correct the outline style in Safari. + */ + + [type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + } + + /** + * Correct the cursor style of increment and decrement buttons in Safari. + */ + + ::-webkit-inner-spin-button, + ::-webkit-outer-spin-button { + height: auto; + } + + /** + * Correct the text style of placeholders in Chrome, Edge, and Safari. + */ + + ::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; + } + + /** + * Remove the inner padding in Chrome, Edge, and Safari on macOS. + */ + + ::-webkit-search-decoration { + -webkit-appearance: none; + } + + /** + * 1. Correct the inability to style upload buttons in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + + ::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ + } + + /** + * Remove the inner border and padding of focus outlines in Firefox. + */ + + ::-moz-focus-inner { + border-style: none; + padding: 0; + } + + /** + * Restore the focus outline styles unset by the previous rule in Firefox. + */ + + :-moz-focusring { + outline: 1px dotted ButtonText; + } + + /** + * Remove the additional :invalid styles in Firefox. + */ + + :-moz-ui-invalid { + box-shadow: none; + } + + /* Interactive + * ========================================================================== */ + + /* + * Add the correct display in Edge 18- and IE. + */ + + details { + display: block; + } + + /* + * Add the correct styles in Edge 18-, IE, and Safari. + */ + + dialog { + background-color: white; + border: solid; + color: black; + display: block; + height: -moz-fit-content; + height: -webkit-fit-content; + height: fit-content; + left: 0; + margin: auto; + padding: 1em; + position: absolute; + right: 0; + width: -moz-fit-content; + width: -webkit-fit-content; + width: fit-content; + } + + dialog:not([open]) { + display: none; + } + + /* + * Add the correct display in all browsers. + */ + + summary { + display: list-item; + } + + /* Scripting + * ========================================================================== */ + + /** + * Add the correct display in IE 9-. + */ + + canvas { + display: inline-block; + } + + /** + * Add the correct display in IE. + */ + + template { + display: none; + } + + /* User interaction + * ========================================================================== */ + + /** + * Add the correct display in IE 10-. + */ + + [hidden] { + display: none; + } \ No newline at end of file diff --git a/Code/Richard/django/lab-01/todo_app/templates/todo_app/home.html b/Code/Richard/django/lab-01/todo_app/templates/todo_app/home.html new file mode 100644 index 00000000..c0bfe61f --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/templates/todo_app/home.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + To Do List App + + + + + +
+
+ {% csrf_token %} + Add To-do Item: + + +
+
+
+
+

To Do List:

+
+ + + + + \ No newline at end of file diff --git a/Code/Richard/django/lab-01/todo_app/tests.py b/Code/Richard/django/lab-01/todo_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/Richard/django/lab-01/todo_app/urls.py b/Code/Richard/django/lab-01/todo_app/urls.py new file mode 100644 index 00000000..c18ede90 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views + +app_name = 'todo_app' +urlpatterns = [ + path('', views.todo_view, name='todo_view'), + path('create/', views.create_todo, name='create') +] \ No newline at end of file diff --git a/Code/Richard/django/lab-01/todo_app/views.py b/Code/Richard/django/lab-01/todo_app/views.py new file mode 100644 index 00000000..9ee2c6ba --- /dev/null +++ b/Code/Richard/django/lab-01/todo_app/views.py @@ -0,0 +1,33 @@ +from django.shortcuts import render, reverse +from django.http import HttpResponseRedirect +from .models import Priority, TodoItem + +# Create your views here. + + +def todo_view(request): + todo_instances = TodoItem.objects.all() + priority_instances = Priority.objects.all() + + context = { + 'todo_instances': todo_instances, + 'priority_instances': priority_instances + } + return render(request, 'todo_app/home.html', context) + +# everything worked with the quickstart until the below code tried to capture/save the form data. + +def create_todo(request): + # print(request.POST) + todo_item_text = request.POST['todo_item_text'] + priority_name = request.POST['priority'] + priority = Priority.objects.get_or_create(name=priority_name)[0] + todo_item = TodoItem(todo_item_text=todo_item_text, priority= priority) + # priority= Priority.objects.get(name=priority) + # print(priority_status) + todo_item.save() + # priority_status.save() + # return HttpResponse('form recieved') + return HttpResponseRedirect(reverse('todo_app:todo_view')) + +# (reverse('todo_app:todo_view')) \ No newline at end of file diff --git a/Code/Richard/django/lab-01/todo_project/__init__.py b/Code/Richard/django/lab-01/todo_project/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/Richard/django/lab-01/todo_project/asgi.py b/Code/Richard/django/lab-01/todo_project/asgi.py new file mode 100644 index 00000000..8c53ccad --- /dev/null +++ b/Code/Richard/django/lab-01/todo_project/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for todo_project project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'todo_project.settings') + +application = get_asgi_application() diff --git a/Code/Richard/django/lab-01/todo_project/settings.py b/Code/Richard/django/lab-01/todo_project/settings.py new file mode 100644 index 00000000..13905db7 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_project/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for todo_project project. + +Generated by 'django-admin startproject' using Django 4.0. + +For more information on this file, see +https://docs.djangoproject.com/en/4.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-p5f90_()u9p58p03m&f$j6m&84@e-7t0#dhvhcmvewa-za(&)n' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'todo_app' +] + +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 = 'todo_project.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 = 'todo_project.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.0/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/4.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'America/Indiana/Knox' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/Code/Richard/django/lab-01/todo_project/urls.py b/Code/Richard/django/lab-01/todo_project/urls.py new file mode 100644 index 00000000..400e2fcf --- /dev/null +++ b/Code/Richard/django/lab-01/todo_project/urls.py @@ -0,0 +1,22 @@ +"""todo_project URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.0/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, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('todo_app.urls')) +] diff --git a/Code/Richard/django/lab-01/todo_project/wsgi.py b/Code/Richard/django/lab-01/todo_project/wsgi.py new file mode 100644 index 00000000..aaa51438 --- /dev/null +++ b/Code/Richard/django/lab-01/todo_project/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for todo_project 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/4.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'todo_project.settings') + +application = get_wsgi_application()