From e1a1467cee2a8b6a27b498b9c20ada28970932a6 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Mar 2022 21:20:26 -0700 Subject: [PATCH 01/20] adding lab 4 pretty much finished --- Code/matthew/html_css/labs/lab_4/index.html | 130 +++++++++++++++----- Code/matthew/html_css/labs/lab_4/login.html | 28 +++-- Code/matthew/html_css/labs/lab_4/menu.html | 16 ++- Code/matthew/html_css/labs/lab_4/order.html | 45 +++++-- Code/matthew/html_css/labs/lab_4/style.css | 39 +++++- 5 files changed, 197 insertions(+), 61 deletions(-) diff --git a/Code/matthew/html_css/labs/lab_4/index.html b/Code/matthew/html_css/labs/lab_4/index.html index 665d6cff..d787ad17 100644 --- a/Code/matthew/html_css/labs/lab_4/index.html +++ b/Code/matthew/html_css/labs/lab_4/index.html @@ -20,35 +20,47 @@ href="C:\Users\Matthew\Documents\Code\class_kiwi\Code\matthew\html_css\labs\lab_4\order.html"> + + Senior Burrito - -
+ + +
+ + +

- +
-
+
-
-

Since xxxx we have been selling Burritos, our Tortilla and chips are home made. We offer indoor and +


+ +
+

Since xxxx we have been selling Burritos, our Tortilla and chips are home made. We offer indoor + and outdoor seating. As well as DoorDash and Uber Eats.

@@ -56,35 +68,93 @@

Seinor Burrito


-
- -

We have Burritos

+
+

Eating healthy doesn't have to be hard! Have a burrito

+
pretend they are pictures of burritos

-
- -
+ - +
-

+
+ +
+
+ ... +
+
Burrito Bowl
+

Classic Burrito in bowl form

+ Quick Order +
+
+
+ +
+ + +
+ +
+
+ ... +
+
Baby Burrito
+

Flour tortilla filled with cheese, rice, beans, your choice of one + meat, + guacamole, sour cream and salsa.

+ Quick Order +
+
+
+
+ + + +
+ +
+
+ ... +
+
Big Burrito
+

Same as the Baby Burrito, Just bigger!

+ Quick Order +
+
+
+
+
- + +

+

-
- + +
+
+

We are local

+
+

+
+
+ + +
+ +

-

-
+ +
©Matthew Holmes 2022
diff --git a/Code/matthew/html_css/labs/lab_4/login.html b/Code/matthew/html_css/labs/lab_4/login.html index cb363e48..38aa3044 100644 --- a/Code/matthew/html_css/labs/lab_4/login.html +++ b/Code/matthew/html_css/labs/lab_4/login.html @@ -20,23 +20,29 @@ href="C:\Users\Matthew\Documents\Code\class_kiwi\Code\matthew\html_css\labs\lab_4\order.html"> + + Login - -
+ + +
@@ -49,9 +55,9 @@

Seinor Burrito

- +

- +
@@ -59,7 +65,7 @@

Seinor Burrito



-
+
©Matthew Holmes 2022
diff --git a/Code/matthew/html_css/labs/lab_4/menu.html b/Code/matthew/html_css/labs/lab_4/menu.html index 5e152ec6..5e6fab69 100644 --- a/Code/matthew/html_css/labs/lab_4/menu.html +++ b/Code/matthew/html_css/labs/lab_4/menu.html @@ -20,17 +20,19 @@ href="C:\Users\Matthew\Documents\Code\class_kiwi\Code\matthew\html_css\labs\lab_4\order.html"> + + Menu -
+
-
+

Seinor Burrito

-
+
@@ -71,7 +74,8 @@
Burrito Bowl
...
Baby Burrito
-

The burrito for smaller stomachs or quick snack

+

Flour tortilla filled with cheese, rice, beans, your choice of one meat, + guacamole, sour cream and salsa.

Quick Order
@@ -84,7 +88,7 @@
Baby Burrito
...
Big Burrito
-

The serious burrito, for the true burrito enthusiast

+

Same as above, Just bigger!

Quick Order
@@ -92,7 +96,7 @@
Big Burrito


-
+
©Matthew Holmes 2022
diff --git a/Code/matthew/html_css/labs/lab_4/order.html b/Code/matthew/html_css/labs/lab_4/order.html index bc26fcf2..02d476c3 100644 --- a/Code/matthew/html_css/labs/lab_4/order.html +++ b/Code/matthew/html_css/labs/lab_4/order.html @@ -20,35 +20,42 @@ href="C:\Users\Matthew\Documents\Code\class_kiwi\Code\matthew\html_css\labs\lab_4\order.html"> + + Order -
+ +
- +
-

Customize your order

+

Customize your order


+

Type:

@@ -65,6 +72,7 @@

Type:


+

Tortilla:

@@ -84,6 +92,7 @@

Tortilla:


+

Rice:

@@ -97,6 +106,7 @@

Rice:


+

Beans:

@@ -110,6 +120,7 @@

Beans:


+

Protein:

@@ -129,6 +140,7 @@

Protein:


+

Add ons:

@@ -143,18 +155,25 @@

Add ons:


+

Delivery Instructions

-
+ +

+ +
+ +
-

-

-
+
+
+
©Matthew Holmes 2022
diff --git a/Code/matthew/html_css/labs/lab_4/style.css b/Code/matthew/html_css/labs/lab_4/style.css index 79cca2ee..a3a907d8 100644 --- a/Code/matthew/html_css/labs/lab_4/style.css +++ b/Code/matthew/html_css/labs/lab_4/style.css @@ -1,10 +1,47 @@ +body { + /* background-image: linear-gradient(45deg, rgba(56,120,78, 0.27),rgba(175,255,102, 0.49)); */ + background-image: linear-gradient(224deg, transparent 0%, transparent 30%,rgba(249, 249, 249,0.02) 30%, rgba(249, 249, 249,0.02) 36%,transparent 36%, transparent 100%),linear-gradient(345deg, transparent 0%, transparent 53%,rgba(255,0,0, 0.02) 53%, rgba(255,0,0, 0.02) 63%,transparent 63%, transparent 100%),linear-gradient(284deg, transparent 0%, transparent 28%,rgba(255,255,255, 0.2) 28%, rgba(255,255,255, 0.2) 38%,transparent 38%, transparent 100%),linear-gradient(90deg, rgb(238,222,222),rgb(238,222,222)); + min-height: 100vh; + color: black; + /* font-family: 'playball'; */ + +} + +/* Header */ + #top-bar { - /* border: 1px solid black; */ + /* background-color: rgba(133, 185, 131, 0.548); */ + background-color: rgba(194, 138, 138, 0.5); + font-family: 'playball'; } a { text-decoration: none; } + +#name { + font-size: 100px; + color: rgba(163, 6, 6, 0.959); +} + +/* h1 for order and login */ +#burrito { + color: rgba(163, 6, 6, 0.959); +} img { max-width: 100%; } +/* index paragraph */ + +#hook { + font-size: 20px; + font-family: 'playball'; + +} + +#location { + font-family: 'playball'; +} + + + From b7a92ef459f23e6003a699aa5297662590b4f907 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Mar 2022 21:24:40 -0700 Subject: [PATCH 02/20] adding flask notes --- .../html_css_flask/labs/lab_1/index.html | 105 ++++++++++ .../html_css_flask/labs/lab_1/style.css | 77 ++++++++ .../html_css_flask/labs/lab_2/index.htm | 88 +++++++++ .../html_css_flask/labs/lab_2/style.css | 122 ++++++++++++ .../html_css_flask/labs/lab_3/about.html | 71 +++++++ .../html_css_flask/labs/lab_3/financial.html | 130 +++++++++++++ .../html_css_flask/labs/lab_3/home_page.html | 164 ++++++++++++++++ .../html_css_flask/labs/lab_3/style.css | 3 + .../html_css_flask/labs/lab_4/index.html | 170 ++++++++++++++++ .../html_css_flask/labs/lab_4/login.html | 74 +++++++ .../html_css_flask/labs/lab_4/menu.html | 105 ++++++++++ .../html_css_flask/labs/lab_4/order.html | 182 ++++++++++++++++++ .../html_css_flask/labs/lab_4/style.css | 47 +++++ .../lectures/1_hello_world/index.html | 75 ++++++++ .../lectures/2_kiwi_profile/index.html | 48 +++++ .../lectures/2_kiwi_profile/styles.css | 31 +++ .../lectures/3_element_types/index.html | 35 ++++ .../lectures/4_css_properties/Kiwi.jpeg | Bin 0 -> 50663 bytes .../lectures/4_css_properties/index.html | 32 +++ .../lectures/4_css_properties/styles.css | 92 +++++++++ .../lectures/5_semantic_elements/index.html | 90 +++++++++ .../lectures/5_semantic_elements/style.css | 57 ++++++ .../lectures/6_frameworks/bootstrap.html | 58 ++++++ .../6_frameworks/materialize/materialize.html | 33 ++++ .../lectures/6_frameworks/pico.html | 18 ++ .../lectures/6_frameworks/style.css | 3 + .../lectures/6_frameworks/tailwind.html | 20 ++ .../7_responsive_design/bootstrap.html | 82 ++++++++ .../lectures/7_responsive_design/index.html | 80 ++++++++ .../lectures/7_responsive_design/style.css | 106 ++++++++++ .../html_css_flask/lectures/9_flask/app.py | 34 ++++ .../lectures/9_flask/static/style.css | 4 + .../lectures/9_flask/templates/about.html | 18 ++ .../9_flask/templates/check-grade.html | 35 ++++ .../lectures/9_flask/templates/contact.html | 21 ++ .../lectures/9_flask/templates/index.html | 25 +++ 36 files changed, 2335 insertions(+) create mode 100644 Code/matthew/html_css_flask/labs/lab_1/index.html create mode 100644 Code/matthew/html_css_flask/labs/lab_1/style.css create mode 100644 Code/matthew/html_css_flask/labs/lab_2/index.htm create mode 100644 Code/matthew/html_css_flask/labs/lab_2/style.css create mode 100644 Code/matthew/html_css_flask/labs/lab_3/about.html create mode 100644 Code/matthew/html_css_flask/labs/lab_3/financial.html create mode 100644 Code/matthew/html_css_flask/labs/lab_3/home_page.html create mode 100644 Code/matthew/html_css_flask/labs/lab_3/style.css create mode 100644 Code/matthew/html_css_flask/labs/lab_4/index.html create mode 100644 Code/matthew/html_css_flask/labs/lab_4/login.html create mode 100644 Code/matthew/html_css_flask/labs/lab_4/menu.html create mode 100644 Code/matthew/html_css_flask/labs/lab_4/order.html create mode 100644 Code/matthew/html_css_flask/labs/lab_4/style.css create mode 100644 Code/matthew/html_css_flask/lectures/1_hello_world/index.html create mode 100644 Code/matthew/html_css_flask/lectures/2_kiwi_profile/index.html create mode 100644 Code/matthew/html_css_flask/lectures/2_kiwi_profile/styles.css create mode 100644 Code/matthew/html_css_flask/lectures/3_element_types/index.html create mode 100644 Code/matthew/html_css_flask/lectures/4_css_properties/Kiwi.jpeg create mode 100644 Code/matthew/html_css_flask/lectures/4_css_properties/index.html create mode 100644 Code/matthew/html_css_flask/lectures/4_css_properties/styles.css create mode 100644 Code/matthew/html_css_flask/lectures/5_semantic_elements/index.html create mode 100644 Code/matthew/html_css_flask/lectures/5_semantic_elements/style.css create mode 100644 Code/matthew/html_css_flask/lectures/6_frameworks/bootstrap.html create mode 100644 Code/matthew/html_css_flask/lectures/6_frameworks/materialize/materialize.html create mode 100644 Code/matthew/html_css_flask/lectures/6_frameworks/pico.html create mode 100644 Code/matthew/html_css_flask/lectures/6_frameworks/style.css create mode 100644 Code/matthew/html_css_flask/lectures/6_frameworks/tailwind.html create mode 100644 Code/matthew/html_css_flask/lectures/7_responsive_design/bootstrap.html create mode 100644 Code/matthew/html_css_flask/lectures/7_responsive_design/index.html create mode 100644 Code/matthew/html_css_flask/lectures/7_responsive_design/style.css create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/app.py create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/static/style.css create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/templates/about.html create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/templates/check-grade.html create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/templates/contact.html create mode 100644 Code/matthew/html_css_flask/lectures/9_flask/templates/index.html diff --git a/Code/matthew/html_css_flask/labs/lab_1/index.html b/Code/matthew/html_css_flask/labs/lab_1/index.html new file mode 100644 index 00000000..10e3c810 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_1/index.html @@ -0,0 +1,105 @@ + + + + + + + Batman + + + + + + + + +
+ + +
+ + +
+
+ +
+ + A picture of batman + +
“No miracles...No mercy...No redemption...No heaven...No hell...No higher power. Just life. Just... us.” -Batman
+ +
+ +

Introduction

+

+ Batman is a superhero appearing in American comic books published by DC Comics. The character was created + by artist Bob Kane and writer Bill Finger, and debuted in the 27th issue of the comic book Detective Comics on + March 30, 1939. In the DC Universe continuity, Batman is the alias of Bruce Wayne, a wealthy American playboy, + philanthropist, and industrialist who resides in Gotham City. Batman's origin story features him swearing vengeance + against criminals after witnessing the murder of his parents Thomas and Martha, a vendetta tempered with the ideal of justice. + He trains himself physically and intellectually, crafts a bat-inspired persona, and monitors the Gotham streets at night. + Kane, Finger, and other creators accompanied Batman with supporting characters, including his sidekicks Robin and Batgirl; allies + Alfred Pennyworth, James Gordon, and Catwoman; and foes such as the Penguin, the Riddler, Two-Face, and his archenemy the Joker. + Kane conceived Batman in early 1939 to capitalize on the popularity of DC's Superman; although Kane frequently claimed sole creation + credit, Finger substantially developed the concept from a generic superhero into something more bat-like. The character received his + own spin-off publication, Batman, in 1940. Batman was originally introduced as a ruthless vigilante who frequently killed or maimed + criminals, but evolved into a character with a stringent moral code and strong sense of justice. Unlike most superheroes, Batman + does not possess any superpowers, instead relying on his intellect, fighting skills, and wealth. The 1960s Batman television series + used a camp aesthetic, which continued to be associated with the character for years after the show ended. Various creators + worked to return the character to his darker roots in the 1970s and 1980s, culminating with the 1986 miniseries The Dark + Knight Returns by Frank Miller. + + DC has featured Batman in many comic books, including comics published under its imprints such as Vertigo and Black Label. + The longest-running Batman comic, Detective Comics, is the longest-running comic book in the United States. Batman is frequently + depicted alongside other DC superheroes, such as Superman and Wonder Woman, as a member of organizations such as the Justice + League and the Outsiders. In addition to Bruce Wayne, other characters have taken on the Batman persona on different occasions, + such as Jean-Paul Valley / Azrael in the 1993–1994 "Knightfall" story arc; Dick Grayson, the first Robin, from 2009 to 2011; + and Jace Fox, son of Wayne's ally Lucius, as of 2021.[4] DC has also published comics featuring alternate versions of Batman, + including the incarnation seen in The Dark Knight Returns and its successors, the incarnation from the Flashpoint (2011) event, + and numerous interpretations from Elseworlds stories. + + One of the most iconic characters in popular culture, Batman has been listed among the greatest comic book superheroes and + fictional characters ever created. He is one of the most commercially successful superheroes, and his likeness has been licensed + and featured in various media and merchandise sold around the world; this includes toy lines such as Lego Batman and video games + like the Batman: Arkham series. Batman has been adapted in live-action and animated incarnations, including the 1960s Batman + television series played by Adam West and in film by Michael Keaton in Batman (1989), Batman Returns (1992) and The Flash (2022), + Christian Bale in The Dark Knight trilogy (2005–2012), Ben Affleck in the DC Extended Universe (2016–present), and Robert Pattinson + in The Batman (2022). Kevin Conroy, Jason O'Mara, and Will Arnett, among others, have provided the character's voice. +

+ +
+
+ + + Here is a link to learn more + +
+ +

Can also be found in

+ +
    +
  • Citizen Wayne
  • +
  • DC Bombshells
  • +
  • The Dark Night
  • +
  • The Dark Multiverse
  • +
  • Injustice: Gods Among Us
  • +
+ +
+

Places of residence

+ +
    +
  • Old Wayne Manor
  • +
  • New Wayne Manor
  • +
+ +
+ +

Information gathered Via wikipedia and general google searches

+ + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_1/style.css b/Code/matthew/html_css_flask/labs/lab_1/style.css new file mode 100644 index 00000000..9ae4ae7b --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_1/style.css @@ -0,0 +1,77 @@ +body { + background-image: linear-gradient(161deg, rgba(121, 121, 121, 0.02) 0%, rgba(121, 121, 121, 0.02) 16.667%,rgba(193, 193, 193, 0.02) 16.667%, rgba(193, 193, 193, 0.02) 33.334%,rgba(177, 177, 177, 0.02) 33.334%, rgba(177, 177, 177, 0.02) 50.001000000000005%,rgba(5, 5, 5, 0.02) 50.001%, rgba(5, 5, 5, 0.02) 66.668%,rgba(229, 229, 229, 0.02) 66.668%, rgba(229, 229, 229, 0.02) 83.33500000000001%,rgba(211, 211, 211, 0.02) 83.335%, rgba(211, 211, 211, 0.02) 100.002%),linear-gradient(45deg, rgba(223, 223, 223, 0.02) 0%, rgba(223, 223, 223, 0.02) 14.286%,rgba(70, 70, 70, 0.02) 14.286%, rgba(70, 70, 70, 0.02) 28.572%,rgba(109, 109, 109, 0.02) 28.572%, rgba(109, 109, 109, 0.02) 42.858%,rgba(19, 19, 19, 0.02) 42.858%, rgba(19, 19, 19, 0.02) 57.144%,rgba(180, 180, 180, 0.02) 57.144%, rgba(180, 180, 180, 0.02) 71.42999999999999%,rgba(63, 63, 63, 0.02) 71.43%, rgba(63, 63, 63, 0.02) 85.71600000000001%,rgba(87, 87, 87, 0.02) 85.716%, rgba(87, 87, 87, 0.02) 100.002%),linear-gradient(337deg, rgba(142, 142, 142, 0.02) 0%, rgba(142, 142, 142, 0.02) 20%,rgba(164, 164, 164, 0.02) 20%, rgba(164, 164, 164, 0.02) 40%,rgba(203, 203, 203, 0.02) 40%, rgba(203, 203, 203, 0.02) 60%,rgba(228, 228, 228, 0.02) 60%, rgba(228, 228, 228, 0.02) 80%,rgba(54, 54, 54, 0.02) 80%, rgba(54, 54, 54, 0.02) 100%),linear-gradient(314deg, rgba(187, 187, 187, 0.02) 0%, rgba(187, 187, 187, 0.02) 12.5%,rgba(170, 170, 170, 0.02) 12.5%, rgba(170, 170, 170, 0.02) 25%,rgba(214, 214, 214, 0.02) 25%, rgba(214, 214, 214, 0.02) 37.5%,rgba(187, 187, 187, 0.02) 37.5%, rgba(187, 187, 187, 0.02) 50%,rgba(190, 190, 190, 0.02) 50%, rgba(190, 190, 190, 0.02) 62.5%,rgba(6, 6, 6, 0.02) 62.5%, rgba(6, 6, 6, 0.02) 75%,rgba(206, 206, 206, 0.02) 75%, rgba(206, 206, 206, 0.02) 87.5%,rgba(171, 171, 171, 0.02) 87.5%, rgba(171, 171, 171, 0.02) 100%),linear-gradient(300deg, rgba(243, 243, 243, 0.01) 0%, rgba(243, 243, 243, 0.01) 12.5%,rgba(209, 209, 209, 0.01) 12.5%, rgba(209, 209, 209, 0.01) 25%,rgba(179, 179, 179, 0.01) 25%, rgba(179, 179, 179, 0.01) 37.5%,rgba(3, 3, 3, 0.01) 37.5%, rgba(3, 3, 3, 0.01) 50%,rgba(211, 211, 211, 0.01) 50%, rgba(211, 211, 211, 0.01) 62.5%,rgba(151, 151, 151, 0.01) 62.5%, rgba(151, 151, 151, 0.01) 75%,rgba(16, 16, 16, 0.01) 75%, rgba(16, 16, 16, 0.01) 87.5%,rgba(242, 242, 242, 0.01) 87.5%, rgba(242, 242, 242, 0.01) 100%),linear-gradient(6deg, rgba(31, 31, 31, 0.02) 0%, rgba(31, 31, 31, 0.02) 20%,rgba(193, 193, 193, 0.02) 20%, rgba(193, 193, 193, 0.02) 40%,rgba(139, 139, 139, 0.02) 40%, rgba(139, 139, 139, 0.02) 60%,rgba(14, 14, 14, 0.02) 60%, rgba(14, 14, 14, 0.02) 80%,rgba(122, 122, 122, 0.02) 80%, rgba(122, 122, 122, 0.02) 100%),linear-gradient(279deg, rgba(190, 190, 190, 0.02) 0%, rgba(190, 190, 190, 0.02) 14.286%,rgba(160, 160, 160, 0.02) 14.286%, rgba(160, 160, 160, 0.02) 28.572%,rgba(23, 23, 23, 0.02) 28.572%, rgba(23, 23, 23, 0.02) 42.858%,rgba(60, 60, 60, 0.02) 42.858%, rgba(60, 60, 60, 0.02) 57.144%,rgba(149, 149, 149, 0.02) 57.144%, rgba(149, 149, 149, 0.02) 71.42999999999999%,rgba(4, 4, 4, 0.02) 71.43%, rgba(4, 4, 4, 0.02) 85.71600000000001%,rgba(50, 50, 50, 0.02) 85.716%, rgba(50, 50, 50, 0.02) 100.002%),linear-gradient(109deg, rgba(124, 124, 124, 0.03) 0%, rgba(124, 124, 124, 0.03) 12.5%,rgba(61, 61, 61, 0.03) 12.5%, rgba(61, 61, 61, 0.03) 25%,rgba(187, 187, 187, 0.03) 25%, rgba(187, 187, 187, 0.03) 37.5%,rgba(207, 207, 207, 0.03) 37.5%, rgba(207, 207, 207, 0.03) 50%,rgba(206, 206, 206, 0.03) 50%, rgba(206, 206, 206, 0.03) 62.5%,rgba(118, 118, 118, 0.03) 62.5%, rgba(118, 118, 118, 0.03) 75%,rgba(89, 89, 89, 0.03) 75%, rgba(89, 89, 89, 0.03) 87.5%,rgba(96, 96, 96, 0.03) 87.5%, rgba(96, 96, 96, 0.03) 100%),linear-gradient(329deg, rgba(35, 35, 35, 0.02) 0%, rgba(35, 35, 35, 0.02) 20%,rgba(246, 246, 246, 0.02) 20%, rgba(246, 246, 246, 0.02) 40%,rgba(118, 118, 118, 0.02) 40%, rgba(118, 118, 118, 0.02) 60%,rgba(245, 245, 245, 0.02) 60%, rgba(245, 245, 245, 0.02) 80%,rgba(140, 140, 140, 0.02) 80%, rgba(140, 140, 140, 0.02) 100%),linear-gradient(90deg, hsl(314,0%,31%),hsl(314,0%,31%)); + background-size: 16%; + color: rgb(194, 194, 187); + font-family: 'pt sans'; + vertical-align: top; + +} +.banner { + background-image: radial-gradient(circle at 16% 83%, rgba(148, 148, 148,0.06) 0%, rgba(148, 148, 148,0.06) 50%,rgba(63, 63, 63,0.06) 50%, rgba(63, 63, 63,0.06) 100%),radial-gradient(circle at 68% 87%, rgba(66, 66, 66,0.06) 0%, rgba(66, 66, 66,0.06) 50%,rgba(105, 105, 105,0.06) 50%, rgba(105, 105, 105,0.06) 100%),radial-gradient(circle at 38% 50%, rgba(123, 123, 123,0.06) 0%, rgba(123, 123, 123,0.06) 50%,rgba(172, 172, 172,0.06) 50%, rgba(172, 172, 172,0.06) 100%),linear-gradient(90deg, hsl(18,0%,1%),hsl(18,0%,1%)); + background-size: 20%; + opacity: 75%; + /* background-repeat: no-repeat; */ + /* border: 2px solid red; */ + width: 100%; + height: 100px; + text-align:center; +} +h1 { + padding: 24px; + color: rgba(255, 255, 0, 0.842); + opacity: 90%; + text-shadow: black 10px 10px; +} + +.line { + border: 1px solid rgb(153, 151, 151); + opacity: 50%; +} + +h2 { + color: black ; + font-family: "oswald"; +} +.intro { + + /* height: ; */ + margin: 0px; + padding: 20px; + clear: right; +} + +.picture { + /* border: 2px solid red; */ + width: 35% ; + /* height: 500px; */ + float :right; + vertical-align: text-top; + +} + +img { + width:100%; + margin: 10px; + border-radius: 20px; + +} + +blockquote { + float: right; + font-family: 'syne mono'; + color: black; +} + +a { + color: rgb(173, 173, 121); + +} + +ul { + list-style-type:circle; + +} + +.ext { + text-align: center; +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_2/index.htm b/Code/matthew/html_css_flask/labs/lab_2/index.htm new file mode 100644 index 00000000..26b73774 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_2/index.htm @@ -0,0 +1,88 @@ + + + + + + + + + Blog + + + + +
+
+
+
+
+
+
+ +
+ +

Introduction

+
+

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Recusandae, doloribus aliquam ipsum quam quaerat minus a maxime culpa quae corporis, consequatur minima quos accusantium, necessitatibus fuga assumenda quis consectetur atque.

+
+
+ +
+
+
+ random picture +
+ +
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, + atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis + tenetur, labore sed rerum facere consequuntur ratione, eius possimus. +
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, + atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis + tenetur, labore sed rerum facere consequuntur ratione, eius possimus. +
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, + atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis + tenetur, labore sed rerum facere consequuntur ratione, eius possimus. +
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, + atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis + tenetur, labore sed rerum facere consequuntur ratione, eius possimus. +
+ +
+ +
+ +
+ random picture +
+ + + + + + +
+

Matthew Holmes © 2022

+
+ + diff --git a/Code/matthew/html_css_flask/labs/lab_2/style.css b/Code/matthew/html_css_flask/labs/lab_2/style.css new file mode 100644 index 00000000..1fa75744 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_2/style.css @@ -0,0 +1,122 @@ +body { + margin: 0; + font-family: "indie Flower"; + display: flex; + flex-direction: column; + min-height: 100vh; + justify-content: space-between; + background-image: linear-gradient(129deg, rgba(49, 49, 49, 0.47) 0%, rgba(49, 49, 49, 0.47) 12.5%,rgba(59, 59, 59, 0.47) 12.5%, rgba(59, 59, 59, 0.47) 25%,rgba(68, 68, 68, 0.47) 25%, rgba(68, 68, 68, 0.47) 37.5%,rgba(78, 78, 78, 0.47) 37.5%, rgba(78, 78, 78, 0.47) 50%,rgba(88, 88, 88, 0.47) 50%, rgba(88, 88, 88, 0.47) 62.5%,rgba(98, 98, 98, 0.47) 62.5%, rgba(98, 98, 98, 0.47) 75%,rgba(107, 107, 107, 0.47) 75%, rgba(107, 107, 107, 0.47) 87.5%,rgba(117, 117, 117, 0.47) 87.5%, rgba(117, 117, 117, 0.47) 100%),linear-gradient(329deg, rgb(25, 25, 25) 0%, rgb(25, 25, 25) 12.5%,rgb(44, 44, 44) 12.5%, rgb(44, 44, 44) 25%,rgb(63, 63, 63) 25%, rgb(63, 63, 63) 37.5%,rgb(82, 82, 82) 37.5%, rgb(82, 82, 82) 50%,rgb(100, 100, 100) 50%, rgb(100, 100, 100) 62.5%,rgb(119, 119, 119) 62.5%, rgb(119, 119, 119) 75%,rgb(138, 138, 138) 75%, rgb(138, 138, 138) 87.5%,rgb(157, 157, 157) 87.5%, rgb(157, 157, 157) 100%); + +} + +nav{ + /* border: 2px solid black; */ + margin: 0; + padding: 0; + display: flex; + position: fixed; + flex-wrap: wrap; + justify-content: space-between; + width: 100vw; + + +} +header { + /* border: 2px solid black; */ + margin: 0; + background-color: rgb(80, 80, 80); + width: 100vw; + display: flex; + justify-content: space-between; + + + +} +#logo { + color: rgb(0, 0, 0); + margin: 0; + font-family: "permanent Marker"; +} +.google { + color: rgb(181, 185, 189); + font-size: x-large; +} + +aside { + /* border: 2px solid black; */ + /* padding: 10px; */ + background-color: rgb(88, 86, 86); + display: flex; + justify-content: space-between; + color: rgb(181, 185, 189); + min-width: 100vw; + height: 30px; +} +.bottom { + padding-right: 20px; +} + +.box { + margin: 10px; + background-color: black; + +} +summary { + background-color: rgb(80, 80, 80); + justify-content: center; + display: flex; + flex-wrap: wrap; + text-align: center; + align-items: center; + margin: 10px; + color: rgb(181, 185, 189); + +} + + +main { + + display: flex; + flex-wrap: wrap; + justify-content:space-between; + color: rgb(159, 179, 195); +} + +.left { + margin-left: 10px; + width: 200px; + /* border: 2px solid green; */ + justify-content: flex-start; +} + +.blog_structure { + width: 70vw; + /* border: 2px solid green; */ + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.blog { + text-align: center; + margin: 15px; + border: 2px solid rgb(0, 0, 0); + border-radius: 10%; + width: 225px; + background-color: rgb(80, 80, 80); +} + +.right { + margin-right: 10px; + width: 200px; + /* border: 2px solid green; */ + justify-content: flex-start; +} + +footer { + display: flex; + background-color: rgb(56, 56, 68); + color: whitesmoke; + justify-content: center; +} + + diff --git a/Code/matthew/html_css_flask/labs/lab_3/about.html b/Code/matthew/html_css_flask/labs/lab_3/about.html new file mode 100644 index 00000000..bed59c0a --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_3/about.html @@ -0,0 +1,71 @@ + + + + + + + About + + + + + + +
+ + +
+
+
+
Mission statement
+ +
+ ... +
+
+
+
+
+

Leaders in Change Since a long time ago

+
+

Inspiring words from the marketing team. ~Now some filler words Lorem ipsum dolor, sit amet consectetur adipisicing elit. Animi, nostrum ipsa minus officiis vitae ullam optio placeat natus doloremque quam asperiores neque sit, modi iure fugiat quaerat odit! Dignissimos, labore Lorem ipsum dolor sit, amet consectetur adipisicing elit. Deleniti est voluptatibus dicta deserunt minus modi ex quo debitis cumque asperiores nesciunt laudantium maiores nihil, error quaerat consequuntur inventore veritatis quod. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellat aperiam molestiae, aliquam quaerat numquam eos amet. Labore, laboriosam sequi vel vero debitis at aliquam totam nostrum laudantium rerum, in vitae. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam fuga fugiat officiis reprehenderit tempore accusantium distinctio quos. Optio blanditiis omnis culpa, assumenda, qui voluptatibus distinctio eveniet incidunt eligendi modi dolores..

+
+
+ +
+ + + + + + + +
+

Matthew Holmes © 2022

+
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_3/financial.html b/Code/matthew/html_css_flask/labs/lab_3/financial.html new file mode 100644 index 00000000..28a7d581 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_3/financial.html @@ -0,0 +1,130 @@ + + + + + + + Document + + + + + + + + + +
+ +
+
+
+
+ ... +
A caption for the above image.
+
+
+ +
+
+

We want you

+

Here at ^Company^ we pride ourselves in things. Some random filler words ~Lorem ipsum dolor sit amet consectetur adipisicing elit. Eius fugit aliquid vel perferendis! Voluptatibus, aliquam consequatur. Suscipit atque eaque rerum explicabo non officia, expedita modi unde, distinctio cumque minus inventore.

+
+
+
+
+
+
+
+ +
+ +
Apply now
+ +
+ +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+
+ + +
+ + + + + + + +
+

Matthew Holmes © 2022

+
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_3/home_page.html b/Code/matthew/html_css_flask/labs/lab_3/home_page.html new file mode 100644 index 00000000..d35f1fd6 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_3/home_page.html @@ -0,0 +1,164 @@ + + + + + + + Document + + + + + + + + + + + + + +
+
+ +
+
+ ... +
+
Help us help you
+

Mission statement but different.

+ +
+
+
+ +
+
+ +
+
+ ... +
+
Here for you
+

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ ... +
+
+
+
Chief Executive Officer
+

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

+

Last updated 3 mins ago

+
+
+
+
+ +
+
+
+ ... +
+
+
+
Chief Financial Executive Officer
+

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

+

Last updated 3 mins ago

+
+
+
+
+
+ +
+
+
+
+
+ + + + + + + +
+

Matthew Holmes © 2022

+
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_3/style.css b/Code/matthew/html_css_flask/labs/lab_3/style.css new file mode 100644 index 00000000..8c1aafde --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_3/style.css @@ -0,0 +1,3 @@ +footer { + text-align: center; +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_4/index.html b/Code/matthew/html_css_flask/labs/lab_4/index.html new file mode 100644 index 00000000..d787ad17 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_4/index.html @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + Senior Burrito + + + + +
+
+
+

Seinor Burrito

+
+ +
+ + + +
+ +
+ +
+
+
+ +
+

+ +
+

Since xxxx we have been selling Burritos, our Tortilla and chips are home made. We offer indoor + and + outdoor seating. As well as DoorDash and Uber Eats. + +

+
+ +

+ +
+

Eating healthy doesn't have to be hard! Have a burrito

+
pretend they are pictures of burritos
+
+ +

+ + + +
+ +
+ +
+
+ ... +
+
Burrito Bowl
+

Classic Burrito in bowl form

+ Quick Order +
+
+
+ +
+ + +
+ +
+
+ ... +
+
Baby Burrito
+

Flour tortilla filled with cheese, rice, beans, your choice of one + meat, + guacamole, sour cream and salsa.

+ Quick Order +
+
+
+
+ + + +
+ +
+
+ ... +
+
Big Burrito
+

Same as the Baby Burrito, Just bigger!

+ Quick Order +
+
+
+
+
+ + +

+

+ + +
+
+

We are local

+
+

+
+
+ + +
+ +
+
+ +

+ +
+ ©Matthew Holmes 2022 +
+
+ + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_4/login.html b/Code/matthew/html_css_flask/labs/lab_4/login.html new file mode 100644 index 00000000..38aa3044 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_4/login.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + Login + + + +
+
+
+

Seinor Burrito

+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+ +
+

+
+ +
+
+ +
+ +

+

+
+ ©Matthew Holmes 2022 +
+
+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_4/menu.html b/Code/matthew/html_css_flask/labs/lab_4/menu.html new file mode 100644 index 00000000..5e6fab69 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_4/menu.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + Menu + + + +
+
+
+

Seinor Burrito

+
+ +
+
+ + +
+ +
+ +
+ ... +
+ +
+

We only have Burritos

+
+ +

+ +
+
+ ... +
+
Burrito Bowl
+

Classic Burrito in bowl form

+ Quick Order +
+
+
+ +

+ +
+
+ ... +
+
Baby Burrito
+

Flour tortilla filled with cheese, rice, beans, your choice of one meat, + guacamole, sour cream and salsa.

+ Quick Order +
+
+
+ +

+ +
+
+ ... +
+
Big Burrito
+

Same as above, Just bigger!

+ Quick Order +
+
+
+
+

+

+
+ ©Matthew Holmes 2022 +
+
+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_4/order.html b/Code/matthew/html_css_flask/labs/lab_4/order.html new file mode 100644 index 00000000..02d476c3 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_4/order.html @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + Order + + + +
+
+
+

Seinor Burrito

+
+ +
+
+ + +
+
+ +
+ +
+

Customize your order

+
+ +

+ + +
+

Type:

+
+
+ + + + + + + + +
+ +

+ + +
+

Tortilla:

+
+
+ + + + + + + + + + + +
+ +

+ + +
+

Rice:

+
+
+ + + + + +
+ +

+ + +
+

Beans:

+
+
+ + + + + +
+ +

+ + +
+

Protein:

+
+
+ + + + + + + + + + + +
+ +

+ + +
+

Add ons:

+
+
+ + + + + + +
+ +

+ + +
+

Delivery Instructions

+
+
+ +
+ +

+ +
+ +
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/labs/lab_4/style.css b/Code/matthew/html_css_flask/labs/lab_4/style.css new file mode 100644 index 00000000..a3a907d8 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_4/style.css @@ -0,0 +1,47 @@ +body { + /* background-image: linear-gradient(45deg, rgba(56,120,78, 0.27),rgba(175,255,102, 0.49)); */ + background-image: linear-gradient(224deg, transparent 0%, transparent 30%,rgba(249, 249, 249,0.02) 30%, rgba(249, 249, 249,0.02) 36%,transparent 36%, transparent 100%),linear-gradient(345deg, transparent 0%, transparent 53%,rgba(255,0,0, 0.02) 53%, rgba(255,0,0, 0.02) 63%,transparent 63%, transparent 100%),linear-gradient(284deg, transparent 0%, transparent 28%,rgba(255,255,255, 0.2) 28%, rgba(255,255,255, 0.2) 38%,transparent 38%, transparent 100%),linear-gradient(90deg, rgb(238,222,222),rgb(238,222,222)); + min-height: 100vh; + color: black; + /* font-family: 'playball'; */ + +} + +/* Header */ + +#top-bar { + /* background-color: rgba(133, 185, 131, 0.548); */ + background-color: rgba(194, 138, 138, 0.5); + font-family: 'playball'; +} +a { + text-decoration: none; +} + +#name { + font-size: 100px; + color: rgba(163, 6, 6, 0.959); +} + +/* h1 for order and login */ +#burrito { + color: rgba(163, 6, 6, 0.959); +} +img { + max-width: 100%; +} + +/* index paragraph */ + +#hook { + font-size: 20px; + font-family: 'playball'; + +} + +#location { + font-family: 'playball'; +} + + + diff --git a/Code/matthew/html_css_flask/lectures/1_hello_world/index.html b/Code/matthew/html_css_flask/lectures/1_hello_world/index.html new file mode 100644 index 00000000..ad758568 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/1_hello_world/index.html @@ -0,0 +1,75 @@ + + + + + + + Class Kiwi + + + +

Heading 1

+

Heading 2

+

Heading 3

+

Heading 4

+
Heading 5
+ Hello there +
Heading 6
+ + +

This is a paragraph. The text is default size.

+ + + + + + +
    +
  1. Item 1
  2. +
  3. Item 2
  4. +
  5. Item 3
  6. +
+ + +
+ + +
+ + + A random picture drawn from Lorem Picsum + + + This is in quotes + + +

A wise person once said Something wise

+ + +
More wise words from wise men
+ +
+ + +
+        for i in range(10):
+            if i % 2 == 0:
+                print('even')
+            else:
+                print('odd')
+        
+
+ + + + This is a link + + + Back to top + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/2_kiwi_profile/index.html b/Code/matthew/html_css_flask/lectures/2_kiwi_profile/index.html new file mode 100644 index 00000000..cd56e2c4 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/2_kiwi_profile/index.html @@ -0,0 +1,48 @@ + + + + + + + Class Kiwi + + + + + + + +

Class Kiwi

+ + + Check out our GitHub + + Kiwi bird + +
+ + +

Class description:

+

Class Kiwi is a fullstack python web development ran by PDX Code Guild +

+ +
+ +

Languages/Frameworks:

+
    +
  1. Python
  2. +
  3. HTML
  4. +
  5. CSS
  6. +
  7. Flask
  8. +
  9. Django
  10. +
  11. Javascript
  12. +
+ +
+ +

Class meets M-F 6:00-9:00pm PT

+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/2_kiwi_profile/styles.css b/Code/matthew/html_css_flask/lectures/2_kiwi_profile/styles.css new file mode 100644 index 00000000..54421ea1 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/2_kiwi_profile/styles.css @@ -0,0 +1,31 @@ +body { + background-color: slategray; + color: whitesmoke; + font-family: 'yanone Kaffeesatz'; + +} +h1 { + text-align: center; + font-family: ' raleway'; +} +img { + border-radius: 50%; + display: block; + width: 150px; + margin: 0 auto; + /* /* offset-x | offset-y | blur-radius | spread-radius | color */ + box-shadow: 8px 8px 15px 4px rgba(0, 0, 0, 0.295); + +} +a { + color: orange; +} +.center-link { + margin-bottom: 10px; + text-align: center; + display: block; +} + +.header { + text-decoration: underline; +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/3_element_types/index.html b/Code/matthew/html_css_flask/lectures/3_element_types/index.html new file mode 100644 index 00000000..c4e04adf --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/3_element_types/index.html @@ -0,0 +1,35 @@ + + + + + + + Element types + + + + +

hello

World

+

Paragraphs are block elements

+ + + + + + + This picture is from lorem pictures + +

Hello

+ + + +

This is a paragraph that will + contain + an inline element

+ + +

hello

World

+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/4_css_properties/Kiwi.jpeg b/Code/matthew/html_css_flask/lectures/4_css_properties/Kiwi.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..270a2a4e6c00b663d4cd5499449cd7aca69318cf GIT binary patch literal 50663 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 + + + + + + CSS Properties + + + + +

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, + reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod + neque error non rerum doloribus.

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, + reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod + neque error non rerum doloribus.

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, + reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod + neque error non rerum doloribus.

+ +
+
This is the child element 1
+
+
+ +
+
This is the child element 2
+
+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/4_css_properties/styles.css b/Code/matthew/html_css_flask/lectures/4_css_properties/styles.css new file mode 100644 index 00000000..509a8eb4 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/4_css_properties/styles.css @@ -0,0 +1,92 @@ +body { + /* Background color */ + + background-color: slategray; +} + +p { + /* Font color */ + + /* color: tomato; */ + /* color: hsl(196, 54%, 70%) */ + /* color: whitesmoke; */ + /* rgb(71, 163, 196) */ + + color: #47a3c4; /* using Hex code from googling color picker */ + + background-color: #685d5d; + + /* Font size */ + + font-size: 20px; +} + +.parent { + /* Borders */ + + border: 2px solid #e2e2e2; + /* width: 500px; + height: 300px; */ +} + +.child { + border: 4px dashed tomato; + width: 200px; + height: 150px; + margin: 10px 20px; + + /* Text alignment */ + text-align: center; + + /* Background image */ + + /* using local file */ + background-image: url("kiwi.jpeg"); + background-size: 100%; + background-position: center; + + + + /* googling gradient magic */ + /* background-image: linear-gradient(216deg, rgba(77, 77, 77,0.05) 0%, rgba(77, 77, 77,0.05) 25%,rgba(42, 42, 42,0.05) 25%, rgba(42, 42, 42,0.05) 38%,rgba(223, 223, 223,0.05) 38%, rgba(223, 223, 223,0.05) 75%,rgba(36, 36, 36,0.05) 75%, rgba(36, 36, 36,0.05) 100%),linear-gradient(44deg, rgba(128, 128, 128,0.05) 0%, rgba(128, 128, 128,0.05) 34%,rgba(212, 212, 212,0.05) 34%, rgba(212, 212, 212,0.05) 57%,rgba(25, 25, 25,0.05) 57%, rgba(25, 25, 25,0.05) 89%,rgba(135, 135, 135,0.05) 89%, rgba(135, 135, 135,0.05) 100%),linear-gradient(241deg, rgba(55, 55, 55,0.05) 0%, rgba(55, 55, 55,0.05) 14%,rgba(209, 209, 209,0.05) 14%, rgba(209, 209, 209,0.05) 60%,rgba(245, 245, 245,0.05) 60%, rgba(245, 245, 245,0.05) 69%,rgba(164, 164, 164,0.05) 69%, rgba(164, 164, 164,0.05) 100%),linear-gradient(249deg, rgba(248, 248, 248,0.05) 0%, rgba(248, 248, 248,0.05) 32%,rgba(148, 148, 148,0.05) 32%, rgba(148, 148, 148,0.05) 35%,rgba(202, 202, 202,0.05) 35%, rgba(202, 202, 202,0.05) 51%,rgba(181, 181, 181,0.05) 51%, rgba(181, 181, 181,0.05) 100%),linear-gradient(92deg, hsl(214,0%,11%),hsl(214,0%,11%)); */ + + /* for using website */ + /* background-image: url("https://media.istockphoto.com/photos/north-island-brown-kiwi-apteryx-mantelli-picture-id525151431?b=1&k=20&m=525151431&s=170667a&w=0&h=L7KvUvQv8tYpFNLlVSZC_Dgduyb4iLsBS6xl38A7_PY=" + alt="Kiwi bird"); */ + + /* margin: 10px */ + /* margin: top bottom */ + /* margin: top right bottom left */ + /* margin-top: 10px; */ + /* margin-bottom: 10px; + margin-right: 10px; + margin-left: 10px ; */ + + /* Full screen width*/ + + /* width: 50vw */ + + /* 50% of "parent" size */ + /* height: 50vh; */ +} + +.parent-2 { + height: 300px; + width: 300px; + background-color: antiquewhite; +} + +.child-2 { + border: 2px solid red; + text-align: center; + padding-top: 10px; + padding-bottom: 10px; +} + +.background { + /* border: 2px solid red; */ + height: calc(100% - 44px); + background-image: url(Kiwi.jpeg); + background-size: 10%; + background-repeat: repeat; +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/5_semantic_elements/index.html b/Code/matthew/html_css_flask/lectures/5_semantic_elements/index.html new file mode 100644 index 00000000..7a307efe --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/5_semantic_elements/index.html @@ -0,0 +1,90 @@ + + + + + + + + Semantic Elements + + +
+ +

Class Kiwi

+ + +
+ + + + +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum + consectetur sequi atque quidem quos est excepturi numquam, odio quisquam + ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem + soluta! +
+
+ +
+

→ Class Kiwi © 2022 ←

+
+ + + + diff --git a/Code/matthew/html_css_flask/lectures/5_semantic_elements/style.css b/Code/matthew/html_css_flask/lectures/5_semantic_elements/style.css new file mode 100644 index 00000000..a7c6cc9b --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/5_semantic_elements/style.css @@ -0,0 +1,57 @@ +body { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 100vh; +} + +header { + border: 2px solid cyan; + display: flex; + /* Horizontal positioning */ + justify-content: space-between; + /* Vertical positioning */ + /* align-items: flex-start; */ +} + +h2 { + margin: 0; + /* display: inline; */ + /* float: left; */ +} +a { + /* float: right; */ +} + + +main { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} + +.box { + border: 2px solid black; + background-color: aqua; + text-align: center; + font-size: 16px; + width: 300px; + margin: 12px 0; +} + +footer { + background-color: black; + color: antiquewhite; + text-align: center; +} +section { + border: 2px solid red; + display: flex; + /* position children in a column */ + flex-direction: column; + height: 400px; + /* When in a column, justify-content is vertical positioning */ + justify-content: space-between; + /* When in a column, align-items is horizontal positioning */ + align-items: center; +} diff --git a/Code/matthew/html_css_flask/lectures/6_frameworks/bootstrap.html b/Code/matthew/html_css_flask/lectures/6_frameworks/bootstrap.html new file mode 100644 index 00000000..3ff8834e --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/6_frameworks/bootstrap.html @@ -0,0 +1,58 @@ + + + + + + + Bootstrap Example + + + + + +
+
+

+ +

+
+
+ This is the first item's accordion body. It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. +
+
+
+
+

+ +

+
+
+ This is the second item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. +
+
+
+
+

+ +

+
+
+ This is the third item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. +
+
+
+
+ + + Link here +

This is the title

+

This is not

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veritatis, at! Soluta quas sapiente eveniet. Officia placeat error alias itaque. Veritatis, aut animi! Iusto odit eaque voluptatum autem ipsa, explicabo ratione?

+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/6_frameworks/materialize/materialize.html b/Code/matthew/html_css_flask/lectures/6_frameworks/materialize/materialize.html new file mode 100644 index 00000000..a548c6d2 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/6_frameworks/materialize/materialize.html @@ -0,0 +1,33 @@ + + + + + + + Materialize Example + + + + + + + + + + Random link +

Hello there

+

Hello people

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse commodi explicabo suscipit, error sequi tempore soluta cupiditate voluptatum. Reprehenderit saepe error aliquam corporis laudantium minus perferendis animi voluptatum pariatur perspiciatis!

+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/6_frameworks/pico.html b/Code/matthew/html_css_flask/lectures/6_frameworks/pico.html new file mode 100644 index 00000000..975c1c3f --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/6_frameworks/pico.html @@ -0,0 +1,18 @@ + + + + + + + Pico Example + + + + + Link here +

This is a title

+

Something else

+

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Minus quod ab aut! Perferendis minus voluptas voluptatem voluptatibus corrupti magni architecto ea fugit reiciendis magnam provident aliquam, laboriosam ducimus sint corporis.

+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/6_frameworks/style.css b/Code/matthew/html_css_flask/lectures/6_frameworks/style.css new file mode 100644 index 00000000..c0be0d41 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/6_frameworks/style.css @@ -0,0 +1,3 @@ +.btn { + text-transform: lowercase; +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/6_frameworks/tailwind.html b/Code/matthew/html_css_flask/lectures/6_frameworks/tailwind.html new file mode 100644 index 00000000..0ef21701 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/6_frameworks/tailwind.html @@ -0,0 +1,20 @@ + + + + + + + + Tailwind Example + + + + + + Link here +

This is a title

+

Something else

+

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Minus quod ab aut! Perferendis minus voluptas voluptatem voluptatibus corrupti magni architecto ea fugit reiciendis magnam provident aliquam, laboriosam ducimus sint corporis.

+ + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/7_responsive_design/bootstrap.html b/Code/matthew/html_css_flask/lectures/7_responsive_design/bootstrap.html new file mode 100644 index 00000000..afb6ac4a --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/7_responsive_design/bootstrap.html @@ -0,0 +1,82 @@ + + + + + + + Responsive Design + + + + + +
+

Class Kiwi

+ +
+
+ +
+
+
+

Title 1

+

+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nihil earum + rerum porro ducimus, rem dolorum, nisi qui possimus, assumenda + quisquam ipsum aliquam nostrum velit exercitationem harum similique. + Dolorem, nostrum sequi. +

+
+
+

Title 2

+

+ Architecto corrupti, veritatis ullam facilis odit nihil, deleniti + soluta accusantium, corporis iste dolore! A itaque deleniti + dignissimos cum, consequuntur natus aliquam nemo ex aut non obcaecati + ipsum perferendis reiciendis exercitationem. +

+
+
+

Title 3

+

+ Pariatur voluptas ratione illo asperiores ad, non fugiat. Harum, saepe + veniam. Facere provident reiciendis odit aliquam repudiandae eligendi. + Ipsa suscipit delectus deleniti officiis quod deserunt asperiores + blanditiis amet corrupti quaerat! +

+
+
+

Title 4

+

+ Culpa quisquam, eos sapiente, aliquid fuga dolorem repudiandae totam, + in molestias iste itaque ipsa! Quod adipisci possimus, natus sunt rem + voluptate odio obcaecati sit nihil suscipit nam harum. Nostrum, rerum. +

+
+
+

Title 5

+

+ Qui odio aspernatur vero voluptatum, similique minus blanditiis et + cupiditate autem quia atque expedita, ducimus sequi, non vel totam ab. + Libero cumque eos assumenda dolorem officia, expedita sint dolorum + itaque! +

+
+
+

Title 6

+

+ Deserunt perspiciatis excepturi ipsum consequatur aperiam quod veniam + distinctio doloribus. Velit, dignissimos sapiente error qui fugit, + ipsam ipsa cupiditate, illum eos expedita odio nesciunt omnis tenetur. + Officiis molestias aliquam quos! +

+
+
+
©2022 Class Kiwi
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/7_responsive_design/index.html b/Code/matthew/html_css_flask/lectures/7_responsive_design/index.html new file mode 100644 index 00000000..98c09329 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/7_responsive_design/index.html @@ -0,0 +1,80 @@ + + + + + + + Responsive Design + + + +
+

Class Kiwi

+ +
+
+ +
+
+
+

Title 1

+

+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nihil earum + rerum porro ducimus, rem dolorum, nisi qui possimus, assumenda + quisquam ipsum aliquam nostrum velit exercitationem harum similique. + Dolorem, nostrum sequi. +

+
+
+

Title 2

+

+ Architecto corrupti, veritatis ullam facilis odit nihil, deleniti + soluta accusantium, corporis iste dolore! A itaque deleniti + dignissimos cum, consequuntur natus aliquam nemo ex aut non obcaecati + ipsum perferendis reiciendis exercitationem. +

+
+
+

Title 3

+

+ Pariatur voluptas ratione illo asperiores ad, non fugiat. Harum, saepe + veniam. Facere provident reiciendis odit aliquam repudiandae eligendi. + Ipsa suscipit delectus deleniti officiis quod deserunt asperiores + blanditiis amet corrupti quaerat! +

+
+
+

Title 4

+

+ Culpa quisquam, eos sapiente, aliquid fuga dolorem repudiandae totam, + in molestias iste itaque ipsa! Quod adipisci possimus, natus sunt rem + voluptate odio obcaecati sit nihil suscipit nam harum. Nostrum, rerum. +

+
+
+

Title 5

+

+ Qui odio aspernatur vero voluptatum, similique minus blanditiis et + cupiditate autem quia atque expedita, ducimus sequi, non vel totam ab. + Libero cumque eos assumenda dolorem officia, expedita sint dolorum + itaque! +

+
+
+

Title 6

+

+ Deserunt perspiciatis excepturi ipsum consequatur aperiam quod veniam + distinctio doloribus. Velit, dignissimos sapiente error qui fugit, + ipsam ipsa cupiditate, illum eos expedita odio nesciunt omnis tenetur. + Officiis molestias aliquam quos! +

+
+
+
©2022 Class Kiwi
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/7_responsive_design/style.css b/Code/matthew/html_css_flask/lectures/7_responsive_design/style.css new file mode 100644 index 00000000..fc9265ea --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/7_responsive_design/style.css @@ -0,0 +1,106 @@ +:root { + /* font-size: 20px; */ +} +body { + font-size: 20px; + display: flex; + flex-direction: column; + justify-content: center; +} + +body > * { + /* border: 2px solid red; */ + /* margin: 4px; */ +} + + +h1 { + text-align: center; +} + +.links { + + display: flex; + flex-direction: column; +} + +.links > a{ + border: 1px solid black; + background-color: rgb(149, 212, 231); + margin: .5em .25em; + box-shadow: inset 2px 2px 6px 0 rgba(0, 0, 0, 0.281); + padding: .25em 0; + text-align: center; + text-decoration: none; +} + +img { + width: 100%; + margin-bottom: 1.5em; + +} + +main { + display: flex; + flex-direction: column; + align-items: center; +} +section { + border: 1px solid black; + margin-bottom: 1em; + max-width: 54ch; + align-items: center; + +} +section > h1 { + text-decoration: underline; +} + +section p { + text-align: center; +} + +/* tablet styles */ +@media screen and (min-width: 768px) { + + body { + /* background-color: grey; */ + } + .links { + flex-direction: row; + justify-content: space-evenly; + } + + .hero { + display: flex; + justify-content: center; + } + img { + width: 75%; + } +} + +/* desktop styles */ +@media screen and (min-width:1440px) { + header { + display: flex; + justify-content: space-between; + align-items: center; + } + + .links { + display: block; + } + + img { + max-width: 900px; + } + main { + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + } + section { + margin: 1em; + } +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/9_flask/app.py b/Code/matthew/html_css_flask/lectures/9_flask/app.py new file mode 100644 index 00000000..ecdb7255 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/app.py @@ -0,0 +1,34 @@ + +from flask import Flask, render_template, request + +app = Flask(__name__) + + +# localhost:5000/ +@app.route('/') +def index(): + name = "Bill" + return render_template('index.html', name=name) + + +@app.route('/about') +def about(): + return render_template('about.html') + + +@app.route('/contact') +def contact(): + return render_template('contact.html') + + +@app.route('/check-grade/') +def check_grade(grade): + return render_template('check-grade.html', grade=grade) + + +@app.route('/llama', methods=['POST']) +def display_name(): + name = request.form['username'] + # print(request.form['username']) + + return render_template('contact.html', name=name) diff --git a/Code/matthew/html_css_flask/lectures/9_flask/static/style.css b/Code/matthew/html_css_flask/lectures/9_flask/static/style.css new file mode 100644 index 00000000..0117c719 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/static/style.css @@ -0,0 +1,4 @@ +body { + text-align: center; + color: rgb(80, 97, 112); +} \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/9_flask/templates/about.html b/Code/matthew/html_css_flask/lectures/9_flask/templates/about.html new file mode 100644 index 00000000..4c39cafb --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/templates/about.html @@ -0,0 +1,18 @@ + + + + + + + + About + + + + +

About page

+ Home + contact + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/9_flask/templates/check-grade.html b/Code/matthew/html_css_flask/lectures/9_flask/templates/check-grade.html new file mode 100644 index 00000000..c40c7535 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/templates/check-grade.html @@ -0,0 +1,35 @@ + + + + + + + + Grade Checker + + + + + + +

Grade Checker

+ {% if grade >= 90 %} +

You got an A

+ + {% elif grade >= 80 %} +

You got a B

+ + {% elif grade >= 70 %} +

You got a C

+ + {% elif grade >= 60 %} +

You got a D

+ + {% else %} +
You got an F
+ + {% endif %} + + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/9_flask/templates/contact.html b/Code/matthew/html_css_flask/lectures/9_flask/templates/contact.html new file mode 100644 index 00000000..d5fede72 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/templates/contact.html @@ -0,0 +1,21 @@ + + + + + + + + Contact + + + + +

Contact us

+

Welcome {{name}}

+ + Home + About + + + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/9_flask/templates/index.html b/Code/matthew/html_css_flask/lectures/9_flask/templates/index.html new file mode 100644 index 00000000..f9932a38 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/9_flask/templates/index.html @@ -0,0 +1,25 @@ + + + + + + + + Flask + + + + +

Welcome to my flask app

+

Hello {{ name }}

+ about + contact + +
+ + +
+ + + + \ No newline at end of file From 24eac05959d0f5b7d707a9c4813f01681da6a6b6 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Fri, 18 Mar 2022 23:55:57 -0700 Subject: [PATCH 03/20] adding lab_5 --- .../lectures/10_rock_paper_scissors/app.py | 37 +++++++++++++++++++ .../templates/index.html | 25 +++++++++++++ .../templates/results.html | 16 ++++++++ .../lectures/10_rock_paper_scissors/app.py | 37 +++++++++++++++++++ .../templates/index.html | 25 +++++++++++++ .../templates/results.html | 16 ++++++++ 6 files changed, 156 insertions(+) create mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py create mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html create mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html create mode 100644 Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/app.py create mode 100644 Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/index.html create mode 100644 Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/results.html diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py b/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py new file mode 100644 index 00000000..959a6db1 --- /dev/null +++ b/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py @@ -0,0 +1,37 @@ + +from flask import Flask, render_template, request +import random + +app= Flask(__name__) + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/play_game', methods=['POST']) +def play_game(): + result = request.form + + user = result['rps'] + computer = random.choice(['rock','paper','scissors']) + + if user == computer: + message = "It is a tie!" + elif user == 'rock': + if computer == 'scissors': + message = 'You win' + else: + message = 'Computer Wins' + elif user == 'paper': + if computer == 'rock': + message = 'You win' + else: + message = 'Computer wins' + else: + if computer == 'paper': + message= 'you win' + else: + message = 'Computer wins' + + print(user,computer, message) + return render_template('results.html', user=user, computer=computer, message=message) \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html new file mode 100644 index 00000000..acce7e06 --- /dev/null +++ b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html @@ -0,0 +1,25 @@ + + + + + + + Rock Paper Scissors + + +

Rock Paper Scissors

+
+ + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html new file mode 100644 index 00000000..395b0a5c --- /dev/null +++ b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html @@ -0,0 +1,16 @@ + + + + + + + {{ message }} + + +

Results

+

you chose {{user}}

+

Computer chose {{computer}}

+

{{message}}

+ Play again? + + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/app.py b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/app.py new file mode 100644 index 00000000..959a6db1 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/app.py @@ -0,0 +1,37 @@ + +from flask import Flask, render_template, request +import random + +app= Flask(__name__) + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/play_game', methods=['POST']) +def play_game(): + result = request.form + + user = result['rps'] + computer = random.choice(['rock','paper','scissors']) + + if user == computer: + message = "It is a tie!" + elif user == 'rock': + if computer == 'scissors': + message = 'You win' + else: + message = 'Computer Wins' + elif user == 'paper': + if computer == 'rock': + message = 'You win' + else: + message = 'Computer wins' + else: + if computer == 'paper': + message= 'you win' + else: + message = 'Computer wins' + + print(user,computer, message) + return render_template('results.html', user=user, computer=computer, message=message) \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/index.html b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/index.html new file mode 100644 index 00000000..acce7e06 --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/index.html @@ -0,0 +1,25 @@ + + + + + + + Rock Paper Scissors + + +

Rock Paper Scissors

+
+ + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/results.html b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/results.html new file mode 100644 index 00000000..395b0a5c --- /dev/null +++ b/Code/matthew/html_css_flask/lectures/10_rock_paper_scissors/templates/results.html @@ -0,0 +1,16 @@ + + + + + + + {{ message }} + + +

Results

+

you chose {{user}}

+

Computer chose {{computer}}

+

{{message}}

+ Play again? + + \ No newline at end of file From 3b54d8f3655de36e424b83c2a42f311329fff415 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Fri, 18 Mar 2022 23:59:49 -0700 Subject: [PATCH 04/20] adding lab_5 --- Code/matthew/html_css_flask/labs/lab_5/app.py | 85 +++++++++++++++++++ .../labs/lab_5/static/style.css | 16 ++++ .../labs/lab_5/templates/decrypt.html | 19 +++++ .../labs/lab_5/templates/encrypted.html | 46 ++++++++++ .../labs/lab_5/templates/index.html | 41 +++++++++ 5 files changed, 207 insertions(+) create mode 100644 Code/matthew/html_css_flask/labs/lab_5/app.py create mode 100644 Code/matthew/html_css_flask/labs/lab_5/static/style.css create mode 100644 Code/matthew/html_css_flask/labs/lab_5/templates/decrypt.html create mode 100644 Code/matthew/html_css_flask/labs/lab_5/templates/encrypted.html create mode 100644 Code/matthew/html_css_flask/labs/lab_5/templates/index.html diff --git a/Code/matthew/html_css_flask/labs/lab_5/app.py b/Code/matthew/html_css_flask/labs/lab_5/app.py new file mode 100644 index 00000000..39f59f7f --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_5/app.py @@ -0,0 +1,85 @@ +from crypt import methods +from email import message +from flask import Flask, render_template, request + +app = Flask(__name__) + + +def rot_cipher_encrypt(message: str, shift: int): + encrypt_dict = { + 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, + 'g': 7, 'h': 8, 'i': 9, 'j': 10, 'k': 11, 'l': 12, + 'm': 13, 'n': 14, 'o': 15, 'p': 16, 'q': 17, 'r': 18, + 's': 19, 't': 20, 'u': 21, 'v': 22, 'w': 23, 'x': 24, + 'y': 25, 'z': 26, + } + decrypt_dict = { + 0: 'z', 1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', + 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', + 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', + 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', + } + encrypted_text = '' + for letter in message: + if letter == ' ': + encrypted_text += letter + else: + num = encrypt_dict[letter] + num = ((num + shift) % 26) + encrypted_text += decrypt_dict[num] + return encrypted_text + + +def rot_cipher_decrypt(message: str, shift: int): + encrypt_dict = { + 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, + 'g': 7, 'h': 8, 'i': 9, 'j': 10, 'k': 11, 'l': 12, + 'm': 13, 'n': 14, 'o': 15, 'p': 16, 'q': 17, 'r': 18, + 's': 19, 't': 20, 'u': 21, 'v': 22, 'w': 23, 'x': 24, + 'y': 25, 'z': 26, + } + decrypt_dict = { + 0: 'z', 1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', + 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', + 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', + 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', + } + decrypt_text = '' + for letter in message: + if letter == ' ': + decrypt_text += letter + else: + num = encrypt_dict[letter] + num = ((num - shift) % 26) + decrypt_text += decrypt_dict[num] + return decrypt_text + +# message = '' +# encrypted_message = '' +# shift = 13 + + +@app.route('/') +def index(): + return render_template('index.html') + + +@app.route('/encrypt', methods=['POST']) +def encrypt(): + + shift = int(request.form['shift']) + message = request.form['user_string'].lower() + encrypted_message = rot_cipher_encrypt(message, shift) + + # print(message) + + return render_template('encrypted.html', encrypted_message=encrypted_message, shift=shift) + + +@app.route('/decrypt', methods=['POST']) +def decrypt(): + shift = int(request.form['shift']) + message = request.form['decrypt_message'].lower() + decrypt_string = rot_cipher_decrypt(message, shift) + + return render_template('decrypt.html', decrypt_string=decrypt_string, shift=shift) diff --git a/Code/matthew/html_css_flask/labs/lab_5/static/style.css b/Code/matthew/html_css_flask/labs/lab_5/static/style.css new file mode 100644 index 00000000..1c02bdb1 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_5/static/style.css @@ -0,0 +1,16 @@ +body { + text-align: center; +} + +header { + display: flex; + flex-direction: column; +} + +a { + padding: 2px; + text-decoration: none; + color: black; + border: 1px solid black; + background-color: rgba(37, 36, 36, 0.295); +} diff --git a/Code/matthew/html_css_flask/labs/lab_5/templates/decrypt.html b/Code/matthew/html_css_flask/labs/lab_5/templates/decrypt.html new file mode 100644 index 00000000..f55e1e71 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_5/templates/decrypt.html @@ -0,0 +1,19 @@ + + + + + + + + + Decrypt + + +

Your decrypted text is {{decrypt_string}}

+
+ Click here to encrypt another text + + diff --git a/Code/matthew/html_css_flask/labs/lab_5/templates/encrypted.html b/Code/matthew/html_css_flask/labs/lab_5/templates/encrypted.html new file mode 100644 index 00000000..91a3ffa9 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_5/templates/encrypted.html @@ -0,0 +1,46 @@ + + + + + + + + + Encrypted + + +

{{encrypted_message}}

+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ + +
+
+ + diff --git a/Code/matthew/html_css_flask/labs/lab_5/templates/index.html b/Code/matthew/html_css_flask/labs/lab_5/templates/index.html new file mode 100644 index 00000000..ca35d7b7 --- /dev/null +++ b/Code/matthew/html_css_flask/labs/lab_5/templates/index.html @@ -0,0 +1,41 @@ + + + + + + + + + Rot13 + + +

Rot13 Encryption

+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ + From bbed595bab1cb6b721f52900a66610d223959fe8 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Tue, 22 Mar 2022 20:54:10 -0700 Subject: [PATCH 05/20] adding django notes --- Code/matthew/django/hello_app/__init__.py | 0 Code/matthew/django/hello_app/admin.py | 3 + Code/matthew/django/hello_app/apps.py | 6 + .../django/hello_app/migrations/__init__.py | 0 Code/matthew/django/hello_app/models.py | 3 + .../matthew/django/hello_app/static/style.css | 0 .../hello_app/templates/hello_app/index.html | 14 ++ Code/matthew/django/hello_app/tests.py | 3 + Code/matthew/django/hello_app/urls.py | 22 +++ Code/matthew/django/hello_app/views.py | 25 ++++ .../django/kiwi_first_proj/__init__.py | 0 Code/matthew/django/kiwi_first_proj/asgi.py | 16 +++ .../django/kiwi_first_proj/settings.py | 126 ++++++++++++++++++ Code/matthew/django/kiwi_first_proj/urls.py | 25 ++++ Code/matthew/django/kiwi_first_proj/wsgi.py | 16 +++ Code/matthew/django/manage.py | 22 +++ 16 files changed, 281 insertions(+) create mode 100644 Code/matthew/django/hello_app/__init__.py create mode 100644 Code/matthew/django/hello_app/admin.py create mode 100644 Code/matthew/django/hello_app/apps.py create mode 100644 Code/matthew/django/hello_app/migrations/__init__.py create mode 100644 Code/matthew/django/hello_app/models.py create mode 100644 Code/matthew/django/hello_app/static/style.css create mode 100644 Code/matthew/django/hello_app/templates/hello_app/index.html create mode 100644 Code/matthew/django/hello_app/tests.py create mode 100644 Code/matthew/django/hello_app/urls.py create mode 100644 Code/matthew/django/hello_app/views.py create mode 100644 Code/matthew/django/kiwi_first_proj/__init__.py create mode 100644 Code/matthew/django/kiwi_first_proj/asgi.py create mode 100644 Code/matthew/django/kiwi_first_proj/settings.py create mode 100644 Code/matthew/django/kiwi_first_proj/urls.py create mode 100644 Code/matthew/django/kiwi_first_proj/wsgi.py create mode 100755 Code/matthew/django/manage.py diff --git a/Code/matthew/django/hello_app/__init__.py b/Code/matthew/django/hello_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/hello_app/admin.py b/Code/matthew/django/hello_app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/Code/matthew/django/hello_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Code/matthew/django/hello_app/apps.py b/Code/matthew/django/hello_app/apps.py new file mode 100644 index 00000000..37e3c0e4 --- /dev/null +++ b/Code/matthew/django/hello_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HelloAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'hello_app' diff --git a/Code/matthew/django/hello_app/migrations/__init__.py b/Code/matthew/django/hello_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/hello_app/models.py b/Code/matthew/django/hello_app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/Code/matthew/django/hello_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Code/matthew/django/hello_app/static/style.css b/Code/matthew/django/hello_app/static/style.css new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/hello_app/templates/hello_app/index.html b/Code/matthew/django/hello_app/templates/hello_app/index.html new file mode 100644 index 00000000..c4e9cc18 --- /dev/null +++ b/Code/matthew/django/hello_app/templates/hello_app/index.html @@ -0,0 +1,14 @@ + + + + + + + Document + + + +

Hello {{name}}

+ + + diff --git a/Code/matthew/django/hello_app/tests.py b/Code/matthew/django/hello_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/hello_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/hello_app/urls.py b/Code/matthew/django/hello_app/urls.py new file mode 100644 index 00000000..bf828431 --- /dev/null +++ b/Code/matthew/django/hello_app/urls.py @@ -0,0 +1,22 @@ +from unicodedata import name +from django.urls import URLPattern, path +# . is short cut for calling the views file. Because it is in the same folder +from . import views + +urlpatterns = [ + # 8000/hello + path('', views.hello, name='hello'), + + # 8000/hello/bruce + path('bruce', views.bruce, name='bruce'), + + # 8000/hello/battman + path('batman', views.batman, name='batman'), + + # 8000/hello/stringname + path('', views.say_hello, name='say_hello'), + # calls the f string on views.py. + # creates a dynamic URL ex: hello/matthew + # prints 'hello matthew' on page + +] diff --git a/Code/matthew/django/hello_app/views.py b/Code/matthew/django/hello_app/views.py new file mode 100644 index 00000000..8022d200 --- /dev/null +++ b/Code/matthew/django/hello_app/views.py @@ -0,0 +1,25 @@ +from django.http import HttpRequest, HttpResponse +from django.shortcuts import render +# import http response from django +from django.http import HttpResponse + +# Create your views here. + + +def hello(request): + return HttpResponse('

Hello World

') + + +def bruce(request): + return HttpResponse('Hello Bruce') + + +def batman(request): + return HttpResponse('We know your batman') + + +def say_hello(request, name): + # return HttpResponse(f'hello {name}') + + # calling index.html + return render(request, 'hello_app/index.html', {'name': name}) diff --git a/Code/matthew/django/kiwi_first_proj/__init__.py b/Code/matthew/django/kiwi_first_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/kiwi_first_proj/asgi.py b/Code/matthew/django/kiwi_first_proj/asgi.py new file mode 100644 index 00000000..8d6f1c66 --- /dev/null +++ b/Code/matthew/django/kiwi_first_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for kiwi_first_proj 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', 'kiwi_first_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/kiwi_first_proj/settings.py b/Code/matthew/django/kiwi_first_proj/settings.py new file mode 100644 index 00000000..f1d6519f --- /dev/null +++ b/Code/matthew/django/kiwi_first_proj/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for kiwi_first_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-0^t^mepds2pdc@4bu+%3uionofuim#yxm5(+np)yrph4o6k2**' + +# 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', + + # add your project apps + 'hello_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 = 'kiwi_first_proj.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 = 'kiwi_first_proj.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/Los_Angeles' + +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/matthew/django/kiwi_first_proj/urls.py b/Code/matthew/django/kiwi_first_proj/urls.py new file mode 100644 index 00000000..d3f4d4ba --- /dev/null +++ b/Code/matthew/django/kiwi_first_proj/urls.py @@ -0,0 +1,25 @@ +"""kiwi_first_proj 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 xml.etree.ElementInclude import include +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('hello/', include('hello_app.urls')), + + # path('goodbye/', include('goodbye_app.urls')), +] diff --git a/Code/matthew/django/kiwi_first_proj/wsgi.py b/Code/matthew/django/kiwi_first_proj/wsgi.py new file mode 100644 index 00000000..97eac6ce --- /dev/null +++ b/Code/matthew/django/kiwi_first_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for kiwi_first_proj 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', 'kiwi_first_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/manage.py b/Code/matthew/django/manage.py new file mode 100755 index 00000000..e77fbc01 --- /dev/null +++ b/Code/matthew/django/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', 'kiwi_first_proj.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() From 91c1203514cf08032e86928a55ee33bbb70c2b4c Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Wed, 23 Mar 2022 18:02:51 -0700 Subject: [PATCH 06/20] Just cleaning up my files --- Code/matthew/html_css/labs/lab_1/index.html | 105 ---------- Code/matthew/html_css/labs/lab_1/style.css | 77 -------- Code/matthew/html_css/labs/lab_2/index.htm | 88 --------- Code/matthew/html_css/labs/lab_2/style.css | 122 ------------ Code/matthew/html_css/labs/lab_3/about.html | 71 ------- .../html_css/labs/lab_3/financial.html | 130 ------------- .../html_css/labs/lab_3/home_page.html | 164 ---------------- Code/matthew/html_css/labs/lab_3/style.css | 3 - Code/matthew/html_css/labs/lab_4/index.html | 170 ---------------- Code/matthew/html_css/labs/lab_4/login.html | 74 ------- Code/matthew/html_css/labs/lab_4/menu.html | 105 ---------- Code/matthew/html_css/labs/lab_4/order.html | 182 ------------------ Code/matthew/html_css/labs/lab_4/style.css | 47 ----- .../lectures/10_rock_paper_scissors/app.py | 37 ---- .../templates/index.html | 25 --- .../templates/results.html | 16 -- .../lectures/1_hello_world/index.html | 75 -------- .../lectures/2_kiwi_profile/index.html | 48 ----- .../lectures/2_kiwi_profile/styles.css | 31 --- .../lectures/3_element_types/index.html | 35 ---- .../lectures/4_css_properties/Kiwi.jpeg | Bin 50663 -> 0 bytes .../lectures/4_css_properties/index.html | 32 --- .../lectures/4_css_properties/styles.css | 92 --------- .../lectures/5_semantic_elements/index.html | 90 --------- .../lectures/5_semantic_elements/style.css | 57 ------ .../lectures/6_frameworks/bootstrap.html | 58 ------ .../6_frameworks/materialize/materialize.html | 33 ---- .../html_css/lectures/6_frameworks/pico.html | 18 -- .../html_css/lectures/6_frameworks/style.css | 3 - .../lectures/6_frameworks/tailwind.html | 20 -- .../7_responsive_design/bootstrap.html | 82 -------- .../lectures/7_responsive_design/index.html | 80 -------- .../lectures/7_responsive_design/style.css | 106 ---------- 33 files changed, 2276 deletions(-) delete mode 100644 Code/matthew/html_css/labs/lab_1/index.html delete mode 100644 Code/matthew/html_css/labs/lab_1/style.css delete mode 100644 Code/matthew/html_css/labs/lab_2/index.htm delete mode 100644 Code/matthew/html_css/labs/lab_2/style.css delete mode 100644 Code/matthew/html_css/labs/lab_3/about.html delete mode 100644 Code/matthew/html_css/labs/lab_3/financial.html delete mode 100644 Code/matthew/html_css/labs/lab_3/home_page.html delete mode 100644 Code/matthew/html_css/labs/lab_3/style.css delete mode 100644 Code/matthew/html_css/labs/lab_4/index.html delete mode 100644 Code/matthew/html_css/labs/lab_4/login.html delete mode 100644 Code/matthew/html_css/labs/lab_4/menu.html delete mode 100644 Code/matthew/html_css/labs/lab_4/order.html delete mode 100644 Code/matthew/html_css/labs/lab_4/style.css delete mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py delete mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html delete mode 100644 Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html delete mode 100644 Code/matthew/html_css/lectures/1_hello_world/index.html delete mode 100644 Code/matthew/html_css/lectures/2_kiwi_profile/index.html delete mode 100644 Code/matthew/html_css/lectures/2_kiwi_profile/styles.css delete mode 100644 Code/matthew/html_css/lectures/3_element_types/index.html delete mode 100644 Code/matthew/html_css/lectures/4_css_properties/Kiwi.jpeg delete mode 100644 Code/matthew/html_css/lectures/4_css_properties/index.html delete mode 100644 Code/matthew/html_css/lectures/4_css_properties/styles.css delete mode 100644 Code/matthew/html_css/lectures/5_semantic_elements/index.html delete mode 100644 Code/matthew/html_css/lectures/5_semantic_elements/style.css delete mode 100644 Code/matthew/html_css/lectures/6_frameworks/bootstrap.html delete mode 100644 Code/matthew/html_css/lectures/6_frameworks/materialize/materialize.html delete mode 100644 Code/matthew/html_css/lectures/6_frameworks/pico.html delete mode 100644 Code/matthew/html_css/lectures/6_frameworks/style.css delete mode 100644 Code/matthew/html_css/lectures/6_frameworks/tailwind.html delete mode 100644 Code/matthew/html_css/lectures/7_responsive_design/bootstrap.html delete mode 100644 Code/matthew/html_css/lectures/7_responsive_design/index.html delete mode 100644 Code/matthew/html_css/lectures/7_responsive_design/style.css diff --git a/Code/matthew/html_css/labs/lab_1/index.html b/Code/matthew/html_css/labs/lab_1/index.html deleted file mode 100644 index 10e3c810..00000000 --- a/Code/matthew/html_css/labs/lab_1/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - Batman - - - - - - - - -
- - -
- - -
-
- -
- - A picture of batman - -
“No miracles...No mercy...No redemption...No heaven...No hell...No higher power. Just life. Just... us.” -Batman
- -
- -

Introduction

-

- Batman is a superhero appearing in American comic books published by DC Comics. The character was created - by artist Bob Kane and writer Bill Finger, and debuted in the 27th issue of the comic book Detective Comics on - March 30, 1939. In the DC Universe continuity, Batman is the alias of Bruce Wayne, a wealthy American playboy, - philanthropist, and industrialist who resides in Gotham City. Batman's origin story features him swearing vengeance - against criminals after witnessing the murder of his parents Thomas and Martha, a vendetta tempered with the ideal of justice. - He trains himself physically and intellectually, crafts a bat-inspired persona, and monitors the Gotham streets at night. - Kane, Finger, and other creators accompanied Batman with supporting characters, including his sidekicks Robin and Batgirl; allies - Alfred Pennyworth, James Gordon, and Catwoman; and foes such as the Penguin, the Riddler, Two-Face, and his archenemy the Joker. - Kane conceived Batman in early 1939 to capitalize on the popularity of DC's Superman; although Kane frequently claimed sole creation - credit, Finger substantially developed the concept from a generic superhero into something more bat-like. The character received his - own spin-off publication, Batman, in 1940. Batman was originally introduced as a ruthless vigilante who frequently killed or maimed - criminals, but evolved into a character with a stringent moral code and strong sense of justice. Unlike most superheroes, Batman - does not possess any superpowers, instead relying on his intellect, fighting skills, and wealth. The 1960s Batman television series - used a camp aesthetic, which continued to be associated with the character for years after the show ended. Various creators - worked to return the character to his darker roots in the 1970s and 1980s, culminating with the 1986 miniseries The Dark - Knight Returns by Frank Miller. - - DC has featured Batman in many comic books, including comics published under its imprints such as Vertigo and Black Label. - The longest-running Batman comic, Detective Comics, is the longest-running comic book in the United States. Batman is frequently - depicted alongside other DC superheroes, such as Superman and Wonder Woman, as a member of organizations such as the Justice - League and the Outsiders. In addition to Bruce Wayne, other characters have taken on the Batman persona on different occasions, - such as Jean-Paul Valley / Azrael in the 1993–1994 "Knightfall" story arc; Dick Grayson, the first Robin, from 2009 to 2011; - and Jace Fox, son of Wayne's ally Lucius, as of 2021.[4] DC has also published comics featuring alternate versions of Batman, - including the incarnation seen in The Dark Knight Returns and its successors, the incarnation from the Flashpoint (2011) event, - and numerous interpretations from Elseworlds stories. - - One of the most iconic characters in popular culture, Batman has been listed among the greatest comic book superheroes and - fictional characters ever created. He is one of the most commercially successful superheroes, and his likeness has been licensed - and featured in various media and merchandise sold around the world; this includes toy lines such as Lego Batman and video games - like the Batman: Arkham series. Batman has been adapted in live-action and animated incarnations, including the 1960s Batman - television series played by Adam West and in film by Michael Keaton in Batman (1989), Batman Returns (1992) and The Flash (2022), - Christian Bale in The Dark Knight trilogy (2005–2012), Ben Affleck in the DC Extended Universe (2016–present), and Robert Pattinson - in The Batman (2022). Kevin Conroy, Jason O'Mara, and Will Arnett, among others, have provided the character's voice. -

- -
-
- - - Here is a link to learn more - -
- -

Can also be found in

- -
    -
  • Citizen Wayne
  • -
  • DC Bombshells
  • -
  • The Dark Night
  • -
  • The Dark Multiverse
  • -
  • Injustice: Gods Among Us
  • -
- -
-

Places of residence

- -
    -
  • Old Wayne Manor
  • -
  • New Wayne Manor
  • -
- -
- -

Information gathered Via wikipedia and general google searches

- - - - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_1/style.css b/Code/matthew/html_css/labs/lab_1/style.css deleted file mode 100644 index 9ae4ae7b..00000000 --- a/Code/matthew/html_css/labs/lab_1/style.css +++ /dev/null @@ -1,77 +0,0 @@ -body { - background-image: linear-gradient(161deg, rgba(121, 121, 121, 0.02) 0%, rgba(121, 121, 121, 0.02) 16.667%,rgba(193, 193, 193, 0.02) 16.667%, rgba(193, 193, 193, 0.02) 33.334%,rgba(177, 177, 177, 0.02) 33.334%, rgba(177, 177, 177, 0.02) 50.001000000000005%,rgba(5, 5, 5, 0.02) 50.001%, rgba(5, 5, 5, 0.02) 66.668%,rgba(229, 229, 229, 0.02) 66.668%, rgba(229, 229, 229, 0.02) 83.33500000000001%,rgba(211, 211, 211, 0.02) 83.335%, rgba(211, 211, 211, 0.02) 100.002%),linear-gradient(45deg, rgba(223, 223, 223, 0.02) 0%, rgba(223, 223, 223, 0.02) 14.286%,rgba(70, 70, 70, 0.02) 14.286%, rgba(70, 70, 70, 0.02) 28.572%,rgba(109, 109, 109, 0.02) 28.572%, rgba(109, 109, 109, 0.02) 42.858%,rgba(19, 19, 19, 0.02) 42.858%, rgba(19, 19, 19, 0.02) 57.144%,rgba(180, 180, 180, 0.02) 57.144%, rgba(180, 180, 180, 0.02) 71.42999999999999%,rgba(63, 63, 63, 0.02) 71.43%, rgba(63, 63, 63, 0.02) 85.71600000000001%,rgba(87, 87, 87, 0.02) 85.716%, rgba(87, 87, 87, 0.02) 100.002%),linear-gradient(337deg, rgba(142, 142, 142, 0.02) 0%, rgba(142, 142, 142, 0.02) 20%,rgba(164, 164, 164, 0.02) 20%, rgba(164, 164, 164, 0.02) 40%,rgba(203, 203, 203, 0.02) 40%, rgba(203, 203, 203, 0.02) 60%,rgba(228, 228, 228, 0.02) 60%, rgba(228, 228, 228, 0.02) 80%,rgba(54, 54, 54, 0.02) 80%, rgba(54, 54, 54, 0.02) 100%),linear-gradient(314deg, rgba(187, 187, 187, 0.02) 0%, rgba(187, 187, 187, 0.02) 12.5%,rgba(170, 170, 170, 0.02) 12.5%, rgba(170, 170, 170, 0.02) 25%,rgba(214, 214, 214, 0.02) 25%, rgba(214, 214, 214, 0.02) 37.5%,rgba(187, 187, 187, 0.02) 37.5%, rgba(187, 187, 187, 0.02) 50%,rgba(190, 190, 190, 0.02) 50%, rgba(190, 190, 190, 0.02) 62.5%,rgba(6, 6, 6, 0.02) 62.5%, rgba(6, 6, 6, 0.02) 75%,rgba(206, 206, 206, 0.02) 75%, rgba(206, 206, 206, 0.02) 87.5%,rgba(171, 171, 171, 0.02) 87.5%, rgba(171, 171, 171, 0.02) 100%),linear-gradient(300deg, rgba(243, 243, 243, 0.01) 0%, rgba(243, 243, 243, 0.01) 12.5%,rgba(209, 209, 209, 0.01) 12.5%, rgba(209, 209, 209, 0.01) 25%,rgba(179, 179, 179, 0.01) 25%, rgba(179, 179, 179, 0.01) 37.5%,rgba(3, 3, 3, 0.01) 37.5%, rgba(3, 3, 3, 0.01) 50%,rgba(211, 211, 211, 0.01) 50%, rgba(211, 211, 211, 0.01) 62.5%,rgba(151, 151, 151, 0.01) 62.5%, rgba(151, 151, 151, 0.01) 75%,rgba(16, 16, 16, 0.01) 75%, rgba(16, 16, 16, 0.01) 87.5%,rgba(242, 242, 242, 0.01) 87.5%, rgba(242, 242, 242, 0.01) 100%),linear-gradient(6deg, rgba(31, 31, 31, 0.02) 0%, rgba(31, 31, 31, 0.02) 20%,rgba(193, 193, 193, 0.02) 20%, rgba(193, 193, 193, 0.02) 40%,rgba(139, 139, 139, 0.02) 40%, rgba(139, 139, 139, 0.02) 60%,rgba(14, 14, 14, 0.02) 60%, rgba(14, 14, 14, 0.02) 80%,rgba(122, 122, 122, 0.02) 80%, rgba(122, 122, 122, 0.02) 100%),linear-gradient(279deg, rgba(190, 190, 190, 0.02) 0%, rgba(190, 190, 190, 0.02) 14.286%,rgba(160, 160, 160, 0.02) 14.286%, rgba(160, 160, 160, 0.02) 28.572%,rgba(23, 23, 23, 0.02) 28.572%, rgba(23, 23, 23, 0.02) 42.858%,rgba(60, 60, 60, 0.02) 42.858%, rgba(60, 60, 60, 0.02) 57.144%,rgba(149, 149, 149, 0.02) 57.144%, rgba(149, 149, 149, 0.02) 71.42999999999999%,rgba(4, 4, 4, 0.02) 71.43%, rgba(4, 4, 4, 0.02) 85.71600000000001%,rgba(50, 50, 50, 0.02) 85.716%, rgba(50, 50, 50, 0.02) 100.002%),linear-gradient(109deg, rgba(124, 124, 124, 0.03) 0%, rgba(124, 124, 124, 0.03) 12.5%,rgba(61, 61, 61, 0.03) 12.5%, rgba(61, 61, 61, 0.03) 25%,rgba(187, 187, 187, 0.03) 25%, rgba(187, 187, 187, 0.03) 37.5%,rgba(207, 207, 207, 0.03) 37.5%, rgba(207, 207, 207, 0.03) 50%,rgba(206, 206, 206, 0.03) 50%, rgba(206, 206, 206, 0.03) 62.5%,rgba(118, 118, 118, 0.03) 62.5%, rgba(118, 118, 118, 0.03) 75%,rgba(89, 89, 89, 0.03) 75%, rgba(89, 89, 89, 0.03) 87.5%,rgba(96, 96, 96, 0.03) 87.5%, rgba(96, 96, 96, 0.03) 100%),linear-gradient(329deg, rgba(35, 35, 35, 0.02) 0%, rgba(35, 35, 35, 0.02) 20%,rgba(246, 246, 246, 0.02) 20%, rgba(246, 246, 246, 0.02) 40%,rgba(118, 118, 118, 0.02) 40%, rgba(118, 118, 118, 0.02) 60%,rgba(245, 245, 245, 0.02) 60%, rgba(245, 245, 245, 0.02) 80%,rgba(140, 140, 140, 0.02) 80%, rgba(140, 140, 140, 0.02) 100%),linear-gradient(90deg, hsl(314,0%,31%),hsl(314,0%,31%)); - background-size: 16%; - color: rgb(194, 194, 187); - font-family: 'pt sans'; - vertical-align: top; - -} -.banner { - background-image: radial-gradient(circle at 16% 83%, rgba(148, 148, 148,0.06) 0%, rgba(148, 148, 148,0.06) 50%,rgba(63, 63, 63,0.06) 50%, rgba(63, 63, 63,0.06) 100%),radial-gradient(circle at 68% 87%, rgba(66, 66, 66,0.06) 0%, rgba(66, 66, 66,0.06) 50%,rgba(105, 105, 105,0.06) 50%, rgba(105, 105, 105,0.06) 100%),radial-gradient(circle at 38% 50%, rgba(123, 123, 123,0.06) 0%, rgba(123, 123, 123,0.06) 50%,rgba(172, 172, 172,0.06) 50%, rgba(172, 172, 172,0.06) 100%),linear-gradient(90deg, hsl(18,0%,1%),hsl(18,0%,1%)); - background-size: 20%; - opacity: 75%; - /* background-repeat: no-repeat; */ - /* border: 2px solid red; */ - width: 100%; - height: 100px; - text-align:center; -} -h1 { - padding: 24px; - color: rgba(255, 255, 0, 0.842); - opacity: 90%; - text-shadow: black 10px 10px; -} - -.line { - border: 1px solid rgb(153, 151, 151); - opacity: 50%; -} - -h2 { - color: black ; - font-family: "oswald"; -} -.intro { - - /* height: ; */ - margin: 0px; - padding: 20px; - clear: right; -} - -.picture { - /* border: 2px solid red; */ - width: 35% ; - /* height: 500px; */ - float :right; - vertical-align: text-top; - -} - -img { - width:100%; - margin: 10px; - border-radius: 20px; - -} - -blockquote { - float: right; - font-family: 'syne mono'; - color: black; -} - -a { - color: rgb(173, 173, 121); - -} - -ul { - list-style-type:circle; - -} - -.ext { - text-align: center; -} \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_2/index.htm b/Code/matthew/html_css/labs/lab_2/index.htm deleted file mode 100644 index 26b73774..00000000 --- a/Code/matthew/html_css/labs/lab_2/index.htm +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - Blog - - - - -
-
-
-
-
-
-
- -
- -

Introduction

-
-

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Recusandae, doloribus aliquam ipsum quam quaerat minus a maxime culpa quae corporis, consequatur minima quos accusantium, necessitatibus fuga assumenda quis consectetur atque.

-
-
- -
-
-
- random picture -
- -
-
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, - atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis - tenetur, labore sed rerum facere consequuntur ratione, eius possimus. -
-
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, - atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis - tenetur, labore sed rerum facere consequuntur ratione, eius possimus. -
-
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, - atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis - tenetur, labore sed rerum facere consequuntur ratione, eius possimus. -
-
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Expedita impedit, - atque accusantium veritatis natus quae non doloremque. Atque quaerat, impedit perferendis - tenetur, labore sed rerum facere consequuntur ratione, eius possimus. -
- -
- -

- -
- random picture -
- - - - - - -
-

Matthew Holmes © 2022

-
- - diff --git a/Code/matthew/html_css/labs/lab_2/style.css b/Code/matthew/html_css/labs/lab_2/style.css deleted file mode 100644 index 1fa75744..00000000 --- a/Code/matthew/html_css/labs/lab_2/style.css +++ /dev/null @@ -1,122 +0,0 @@ -body { - margin: 0; - font-family: "indie Flower"; - display: flex; - flex-direction: column; - min-height: 100vh; - justify-content: space-between; - background-image: linear-gradient(129deg, rgba(49, 49, 49, 0.47) 0%, rgba(49, 49, 49, 0.47) 12.5%,rgba(59, 59, 59, 0.47) 12.5%, rgba(59, 59, 59, 0.47) 25%,rgba(68, 68, 68, 0.47) 25%, rgba(68, 68, 68, 0.47) 37.5%,rgba(78, 78, 78, 0.47) 37.5%, rgba(78, 78, 78, 0.47) 50%,rgba(88, 88, 88, 0.47) 50%, rgba(88, 88, 88, 0.47) 62.5%,rgba(98, 98, 98, 0.47) 62.5%, rgba(98, 98, 98, 0.47) 75%,rgba(107, 107, 107, 0.47) 75%, rgba(107, 107, 107, 0.47) 87.5%,rgba(117, 117, 117, 0.47) 87.5%, rgba(117, 117, 117, 0.47) 100%),linear-gradient(329deg, rgb(25, 25, 25) 0%, rgb(25, 25, 25) 12.5%,rgb(44, 44, 44) 12.5%, rgb(44, 44, 44) 25%,rgb(63, 63, 63) 25%, rgb(63, 63, 63) 37.5%,rgb(82, 82, 82) 37.5%, rgb(82, 82, 82) 50%,rgb(100, 100, 100) 50%, rgb(100, 100, 100) 62.5%,rgb(119, 119, 119) 62.5%, rgb(119, 119, 119) 75%,rgb(138, 138, 138) 75%, rgb(138, 138, 138) 87.5%,rgb(157, 157, 157) 87.5%, rgb(157, 157, 157) 100%); - -} - -nav{ - /* border: 2px solid black; */ - margin: 0; - padding: 0; - display: flex; - position: fixed; - flex-wrap: wrap; - justify-content: space-between; - width: 100vw; - - -} -header { - /* border: 2px solid black; */ - margin: 0; - background-color: rgb(80, 80, 80); - width: 100vw; - display: flex; - justify-content: space-between; - - - -} -#logo { - color: rgb(0, 0, 0); - margin: 0; - font-family: "permanent Marker"; -} -.google { - color: rgb(181, 185, 189); - font-size: x-large; -} - -aside { - /* border: 2px solid black; */ - /* padding: 10px; */ - background-color: rgb(88, 86, 86); - display: flex; - justify-content: space-between; - color: rgb(181, 185, 189); - min-width: 100vw; - height: 30px; -} -.bottom { - padding-right: 20px; -} - -.box { - margin: 10px; - background-color: black; - -} -summary { - background-color: rgb(80, 80, 80); - justify-content: center; - display: flex; - flex-wrap: wrap; - text-align: center; - align-items: center; - margin: 10px; - color: rgb(181, 185, 189); - -} - - -main { - - display: flex; - flex-wrap: wrap; - justify-content:space-between; - color: rgb(159, 179, 195); -} - -.left { - margin-left: 10px; - width: 200px; - /* border: 2px solid green; */ - justify-content: flex-start; -} - -.blog_structure { - width: 70vw; - /* border: 2px solid green; */ - display: flex; - flex-wrap: wrap; - justify-content: space-between; -} -.blog { - text-align: center; - margin: 15px; - border: 2px solid rgb(0, 0, 0); - border-radius: 10%; - width: 225px; - background-color: rgb(80, 80, 80); -} - -.right { - margin-right: 10px; - width: 200px; - /* border: 2px solid green; */ - justify-content: flex-start; -} - -footer { - display: flex; - background-color: rgb(56, 56, 68); - color: whitesmoke; - justify-content: center; -} - - diff --git a/Code/matthew/html_css/labs/lab_3/about.html b/Code/matthew/html_css/labs/lab_3/about.html deleted file mode 100644 index bed59c0a..00000000 --- a/Code/matthew/html_css/labs/lab_3/about.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - About - - - - - - -
- - -
-
-
-
Mission statement
- -
- ... -
-
-
-
-
-

Leaders in Change Since a long time ago

-
-

Inspiring words from the marketing team. ~Now some filler words Lorem ipsum dolor, sit amet consectetur adipisicing elit. Animi, nostrum ipsa minus officiis vitae ullam optio placeat natus doloremque quam asperiores neque sit, modi iure fugiat quaerat odit! Dignissimos, labore Lorem ipsum dolor sit, amet consectetur adipisicing elit. Deleniti est voluptatibus dicta deserunt minus modi ex quo debitis cumque asperiores nesciunt laudantium maiores nihil, error quaerat consequuntur inventore veritatis quod. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellat aperiam molestiae, aliquam quaerat numquam eos amet. Labore, laboriosam sequi vel vero debitis at aliquam totam nostrum laudantium rerum, in vitae. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam fuga fugiat officiis reprehenderit tempore accusantium distinctio quos. Optio blanditiis omnis culpa, assumenda, qui voluptatibus distinctio eveniet incidunt eligendi modi dolores..

-
-
- -
- - - - - - - -
-

Matthew Holmes © 2022

-
- - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_3/financial.html b/Code/matthew/html_css/labs/lab_3/financial.html deleted file mode 100644 index 28a7d581..00000000 --- a/Code/matthew/html_css/labs/lab_3/financial.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - Document - - - - - - - - - -
- -
-
-
-
- ... -
A caption for the above image.
-
-
- -
-
-

We want you

-

Here at ^Company^ we pride ourselves in things. Some random filler words ~Lorem ipsum dolor sit amet consectetur adipisicing elit. Eius fugit aliquid vel perferendis! Voluptatibus, aliquam consequatur. Suscipit atque eaque rerum explicabo non officia, expedita modi unde, distinctio cumque minus inventore.

-
-
-
-
-
-
-
- -
- -
Apply now
- -
- -
-
- - -
- -
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- - -
-
-
- - -
- - - - - - - -
-

Matthew Holmes © 2022

-
- - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_3/home_page.html b/Code/matthew/html_css/labs/lab_3/home_page.html deleted file mode 100644 index d35f1fd6..00000000 --- a/Code/matthew/html_css/labs/lab_3/home_page.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - Document - - - - - - - - - - - - - -
-
- -
-
- ... -
-
Help us help you
-

Mission statement but different.

- -
-
-
- -
-
- -
-
- ... -
-
Here for you
-

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

- -
-
-
- -
-
-
- -
-
- -
-
-
- ... -
-
-
-
Chief Executive Officer
-

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

-

Last updated 3 mins ago

-
-
-
-
- -
-
-
- ... -
-
-
-
Chief Financial Executive Officer
-

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

-

Last updated 3 mins ago

-
-
-
-
-
- -
-
-
-
-
- - - - - - - -
-

Matthew Holmes © 2022

-
- - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_3/style.css b/Code/matthew/html_css/labs/lab_3/style.css deleted file mode 100644 index 8c1aafde..00000000 --- a/Code/matthew/html_css/labs/lab_3/style.css +++ /dev/null @@ -1,3 +0,0 @@ -footer { - text-align: center; -} \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_4/index.html b/Code/matthew/html_css/labs/lab_4/index.html deleted file mode 100644 index d787ad17..00000000 --- a/Code/matthew/html_css/labs/lab_4/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Senior Burrito - - - - -
-
-
-

Seinor Burrito

-
- -
- - - -
- -
- -
-
-
- -
-

- -
-

Since xxxx we have been selling Burritos, our Tortilla and chips are home made. We offer indoor - and - outdoor seating. As well as DoorDash and Uber Eats. - -

-
- -

- -
-

Eating healthy doesn't have to be hard! Have a burrito

-
pretend they are pictures of burritos
-
- -

- - - -
- -
- -
-
- ... -
-
Burrito Bowl
-

Classic Burrito in bowl form

- Quick Order -
-
-
- -
- - -
- -
-
- ... -
-
Baby Burrito
-

Flour tortilla filled with cheese, rice, beans, your choice of one - meat, - guacamole, sour cream and salsa.

- Quick Order -
-
-
-
- - - -
- -
-
- ... -
-
Big Burrito
-

Same as the Baby Burrito, Just bigger!

- Quick Order -
-
-
-
-
- - -

-

- - -
-
-

We are local

-
-

-
-
- - -
- -
-
- -

- -
- ©Matthew Holmes 2022 -
-
- - - - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_4/login.html b/Code/matthew/html_css/labs/lab_4/login.html deleted file mode 100644 index 38aa3044..00000000 --- a/Code/matthew/html_css/labs/lab_4/login.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Login - - - -
-
-
-

Seinor Burrito

-
- -
-
- -
-
- -
-
- -
- - -
- -
-

-
- -
-
- -
- -

-

-
- ©Matthew Holmes 2022 -
- - - - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_4/menu.html b/Code/matthew/html_css/labs/lab_4/menu.html deleted file mode 100644 index 5e6fab69..00000000 --- a/Code/matthew/html_css/labs/lab_4/menu.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Menu - - - -
-
-
-

Seinor Burrito

-
- -
-
- - -
- -
- -
- ... -
- -
-

We only have Burritos

-
- -

- -
-
- ... -
-
Burrito Bowl
-

Classic Burrito in bowl form

- Quick Order -
-
-
- -

- -
-
- ... -
-
Baby Burrito
-

Flour tortilla filled with cheese, rice, beans, your choice of one meat, - guacamole, sour cream and salsa.

- Quick Order -
-
-
- -

- -
-
- ... -
-
Big Burrito
-

Same as above, Just bigger!

- Quick Order -
-
-
-
-

-

-
- ©Matthew Holmes 2022 -
- - - - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_4/order.html b/Code/matthew/html_css/labs/lab_4/order.html deleted file mode 100644 index 02d476c3..00000000 --- a/Code/matthew/html_css/labs/lab_4/order.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Order - - - -
-
-
-

Seinor Burrito

-
- -
-
- - -
-
- -
- -
-

Customize your order

-
- -

- - -
-

Type:

-
-
- - - - - - - - -
- -

- - -
-

Tortilla:

-
-
- - - - - - - - - - - -
- -

- - -
-

Rice:

-
-
- - - - - -
- -

- - -
-

Beans:

-
-
- - - - - -
- -

- - -
-

Protein:

-
-
- - - - - - - - - - - -
- -

- - -
-

Add ons:

-
-
- - - - - - -
- -

- - -
-

Delivery Instructions

-
-
- -
- -

- -
- -
-
-
-
-
-
- ©Matthew Holmes 2022 -
- - - - \ No newline at end of file diff --git a/Code/matthew/html_css/labs/lab_4/style.css b/Code/matthew/html_css/labs/lab_4/style.css deleted file mode 100644 index a3a907d8..00000000 --- a/Code/matthew/html_css/labs/lab_4/style.css +++ /dev/null @@ -1,47 +0,0 @@ -body { - /* background-image: linear-gradient(45deg, rgba(56,120,78, 0.27),rgba(175,255,102, 0.49)); */ - background-image: linear-gradient(224deg, transparent 0%, transparent 30%,rgba(249, 249, 249,0.02) 30%, rgba(249, 249, 249,0.02) 36%,transparent 36%, transparent 100%),linear-gradient(345deg, transparent 0%, transparent 53%,rgba(255,0,0, 0.02) 53%, rgba(255,0,0, 0.02) 63%,transparent 63%, transparent 100%),linear-gradient(284deg, transparent 0%, transparent 28%,rgba(255,255,255, 0.2) 28%, rgba(255,255,255, 0.2) 38%,transparent 38%, transparent 100%),linear-gradient(90deg, rgb(238,222,222),rgb(238,222,222)); - min-height: 100vh; - color: black; - /* font-family: 'playball'; */ - -} - -/* Header */ - -#top-bar { - /* background-color: rgba(133, 185, 131, 0.548); */ - background-color: rgba(194, 138, 138, 0.5); - font-family: 'playball'; -} -a { - text-decoration: none; -} - -#name { - font-size: 100px; - color: rgba(163, 6, 6, 0.959); -} - -/* h1 for order and login */ -#burrito { - color: rgba(163, 6, 6, 0.959); -} -img { - max-width: 100%; -} - -/* index paragraph */ - -#hook { - font-size: 20px; - font-family: 'playball'; - -} - -#location { - font-family: 'playball'; -} - - - diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py b/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py deleted file mode 100644 index 959a6db1..00000000 --- a/Code/matthew/html_css/lectures/10_rock_paper_scissors/app.py +++ /dev/null @@ -1,37 +0,0 @@ - -from flask import Flask, render_template, request -import random - -app= Flask(__name__) - -@app.route('/') -def index(): - return render_template('index.html') - -@app.route('/play_game', methods=['POST']) -def play_game(): - result = request.form - - user = result['rps'] - computer = random.choice(['rock','paper','scissors']) - - if user == computer: - message = "It is a tie!" - elif user == 'rock': - if computer == 'scissors': - message = 'You win' - else: - message = 'Computer Wins' - elif user == 'paper': - if computer == 'rock': - message = 'You win' - else: - message = 'Computer wins' - else: - if computer == 'paper': - message= 'you win' - else: - message = 'Computer wins' - - print(user,computer, message) - return render_template('results.html', user=user, computer=computer, message=message) \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html deleted file mode 100644 index acce7e06..00000000 --- a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - Rock Paper Scissors - - -

Rock Paper Scissors

-
- - - - - - - - - - - -
- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html b/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html deleted file mode 100644 index 395b0a5c..00000000 --- a/Code/matthew/html_css/lectures/10_rock_paper_scissors/templates/results.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - {{ message }} - - -

Results

-

you chose {{user}}

-

Computer chose {{computer}}

-

{{message}}

- Play again? - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/1_hello_world/index.html b/Code/matthew/html_css/lectures/1_hello_world/index.html deleted file mode 100644 index ad758568..00000000 --- a/Code/matthew/html_css/lectures/1_hello_world/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - Class Kiwi - - - -

Heading 1

-

Heading 2

-

Heading 3

-

Heading 4

-
Heading 5
- Hello there -
Heading 6
- - -

This is a paragraph. The text is default size.

- - - - -
    -
  • Item 1
  • -
  • Item 2
  • -
  • Item 3
  • -
- -
    -
  1. Item 1
  2. -
  3. Item 2
  4. -
  5. Item 3
  6. -
- - -
- - -
- - - A random picture drawn from Lorem Picsum - - - This is in quotes - - -

A wise person once said Something wise

- - -
More wise words from wise men
- -
- - -
-        for i in range(10):
-            if i % 2 == 0:
-                print('even')
-            else:
-                print('odd')
-        
-
- - - - This is a link - - - Back to top - - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/2_kiwi_profile/index.html b/Code/matthew/html_css/lectures/2_kiwi_profile/index.html deleted file mode 100644 index cd56e2c4..00000000 --- a/Code/matthew/html_css/lectures/2_kiwi_profile/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - Class Kiwi - - - - - - - -

Class Kiwi

- - - Check out our GitHub - - Kiwi bird - -
- - -

Class description:

-

Class Kiwi is a fullstack python web development ran by PDX Code Guild -

- -
- -

Languages/Frameworks:

-
    -
  1. Python
  2. -
  3. HTML
  4. -
  5. CSS
  6. -
  7. Flask
  8. -
  9. Django
  10. -
  11. Javascript
  12. -
- -
- -

Class meets M-F 6:00-9:00pm PT

- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/2_kiwi_profile/styles.css b/Code/matthew/html_css/lectures/2_kiwi_profile/styles.css deleted file mode 100644 index 54421ea1..00000000 --- a/Code/matthew/html_css/lectures/2_kiwi_profile/styles.css +++ /dev/null @@ -1,31 +0,0 @@ -body { - background-color: slategray; - color: whitesmoke; - font-family: 'yanone Kaffeesatz'; - -} -h1 { - text-align: center; - font-family: ' raleway'; -} -img { - border-radius: 50%; - display: block; - width: 150px; - margin: 0 auto; - /* /* offset-x | offset-y | blur-radius | spread-radius | color */ - box-shadow: 8px 8px 15px 4px rgba(0, 0, 0, 0.295); - -} -a { - color: orange; -} -.center-link { - margin-bottom: 10px; - text-align: center; - display: block; -} - -.header { - text-decoration: underline; -} \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/3_element_types/index.html b/Code/matthew/html_css/lectures/3_element_types/index.html deleted file mode 100644 index c4e04adf..00000000 --- a/Code/matthew/html_css/lectures/3_element_types/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - Element types - - - - -

hello

World

-

Paragraphs are block elements

- - - - - - - This picture is from lorem pictures - -

Hello

- - - -

This is a paragraph that will - contain - an inline element

- - -

hello

World

- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/4_css_properties/Kiwi.jpeg b/Code/matthew/html_css/lectures/4_css_properties/Kiwi.jpeg deleted file mode 100644 index 270a2a4e6c00b663d4cd5499449cd7aca69318cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50663 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 - - - - - - CSS Properties - - - - -

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, - reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod - neque error non rerum doloribus.

-

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, - reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod - neque error non rerum doloribus.

-

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae fuga vero autem, - reiciendis in animi explicabo a iure facere veritatis ullam molestiae cumque mollitia quod - neque error non rerum doloribus.

- -
-
This is the child element 1
-
-
- -
-
This is the child element 2
-
- - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/4_css_properties/styles.css b/Code/matthew/html_css/lectures/4_css_properties/styles.css deleted file mode 100644 index 509a8eb4..00000000 --- a/Code/matthew/html_css/lectures/4_css_properties/styles.css +++ /dev/null @@ -1,92 +0,0 @@ -body { - /* Background color */ - - background-color: slategray; -} - -p { - /* Font color */ - - /* color: tomato; */ - /* color: hsl(196, 54%, 70%) */ - /* color: whitesmoke; */ - /* rgb(71, 163, 196) */ - - color: #47a3c4; /* using Hex code from googling color picker */ - - background-color: #685d5d; - - /* Font size */ - - font-size: 20px; -} - -.parent { - /* Borders */ - - border: 2px solid #e2e2e2; - /* width: 500px; - height: 300px; */ -} - -.child { - border: 4px dashed tomato; - width: 200px; - height: 150px; - margin: 10px 20px; - - /* Text alignment */ - text-align: center; - - /* Background image */ - - /* using local file */ - background-image: url("kiwi.jpeg"); - background-size: 100%; - background-position: center; - - - - /* googling gradient magic */ - /* background-image: linear-gradient(216deg, rgba(77, 77, 77,0.05) 0%, rgba(77, 77, 77,0.05) 25%,rgba(42, 42, 42,0.05) 25%, rgba(42, 42, 42,0.05) 38%,rgba(223, 223, 223,0.05) 38%, rgba(223, 223, 223,0.05) 75%,rgba(36, 36, 36,0.05) 75%, rgba(36, 36, 36,0.05) 100%),linear-gradient(44deg, rgba(128, 128, 128,0.05) 0%, rgba(128, 128, 128,0.05) 34%,rgba(212, 212, 212,0.05) 34%, rgba(212, 212, 212,0.05) 57%,rgba(25, 25, 25,0.05) 57%, rgba(25, 25, 25,0.05) 89%,rgba(135, 135, 135,0.05) 89%, rgba(135, 135, 135,0.05) 100%),linear-gradient(241deg, rgba(55, 55, 55,0.05) 0%, rgba(55, 55, 55,0.05) 14%,rgba(209, 209, 209,0.05) 14%, rgba(209, 209, 209,0.05) 60%,rgba(245, 245, 245,0.05) 60%, rgba(245, 245, 245,0.05) 69%,rgba(164, 164, 164,0.05) 69%, rgba(164, 164, 164,0.05) 100%),linear-gradient(249deg, rgba(248, 248, 248,0.05) 0%, rgba(248, 248, 248,0.05) 32%,rgba(148, 148, 148,0.05) 32%, rgba(148, 148, 148,0.05) 35%,rgba(202, 202, 202,0.05) 35%, rgba(202, 202, 202,0.05) 51%,rgba(181, 181, 181,0.05) 51%, rgba(181, 181, 181,0.05) 100%),linear-gradient(92deg, hsl(214,0%,11%),hsl(214,0%,11%)); */ - - /* for using website */ - /* background-image: url("https://media.istockphoto.com/photos/north-island-brown-kiwi-apteryx-mantelli-picture-id525151431?b=1&k=20&m=525151431&s=170667a&w=0&h=L7KvUvQv8tYpFNLlVSZC_Dgduyb4iLsBS6xl38A7_PY=" - alt="Kiwi bird"); */ - - /* margin: 10px */ - /* margin: top bottom */ - /* margin: top right bottom left */ - /* margin-top: 10px; */ - /* margin-bottom: 10px; - margin-right: 10px; - margin-left: 10px ; */ - - /* Full screen width*/ - - /* width: 50vw */ - - /* 50% of "parent" size */ - /* height: 50vh; */ -} - -.parent-2 { - height: 300px; - width: 300px; - background-color: antiquewhite; -} - -.child-2 { - border: 2px solid red; - text-align: center; - padding-top: 10px; - padding-bottom: 10px; -} - -.background { - /* border: 2px solid red; */ - height: calc(100% - 44px); - background-image: url(Kiwi.jpeg); - background-size: 10%; - background-repeat: repeat; -} \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/5_semantic_elements/index.html b/Code/matthew/html_css/lectures/5_semantic_elements/index.html deleted file mode 100644 index 7a307efe..00000000 --- a/Code/matthew/html_css/lectures/5_semantic_elements/index.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - Semantic Elements - - -
- -

Class Kiwi

- - -
- - - - -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Laborum - consectetur sequi atque quidem quos est excepturi numquam, odio quisquam - ex aut ab aspernatur laudantium, mollitia totam alias amet voluptatem - soluta! -
-
- -
-

→ Class Kiwi © 2022 ←

-
- - - - diff --git a/Code/matthew/html_css/lectures/5_semantic_elements/style.css b/Code/matthew/html_css/lectures/5_semantic_elements/style.css deleted file mode 100644 index a7c6cc9b..00000000 --- a/Code/matthew/html_css/lectures/5_semantic_elements/style.css +++ /dev/null @@ -1,57 +0,0 @@ -body { - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 100vh; -} - -header { - border: 2px solid cyan; - display: flex; - /* Horizontal positioning */ - justify-content: space-between; - /* Vertical positioning */ - /* align-items: flex-start; */ -} - -h2 { - margin: 0; - /* display: inline; */ - /* float: left; */ -} -a { - /* float: right; */ -} - - -main { - display: flex; - flex-wrap: wrap; - justify-content: space-evenly; -} - -.box { - border: 2px solid black; - background-color: aqua; - text-align: center; - font-size: 16px; - width: 300px; - margin: 12px 0; -} - -footer { - background-color: black; - color: antiquewhite; - text-align: center; -} -section { - border: 2px solid red; - display: flex; - /* position children in a column */ - flex-direction: column; - height: 400px; - /* When in a column, justify-content is vertical positioning */ - justify-content: space-between; - /* When in a column, align-items is horizontal positioning */ - align-items: center; -} diff --git a/Code/matthew/html_css/lectures/6_frameworks/bootstrap.html b/Code/matthew/html_css/lectures/6_frameworks/bootstrap.html deleted file mode 100644 index 3ff8834e..00000000 --- a/Code/matthew/html_css/lectures/6_frameworks/bootstrap.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - Bootstrap Example - - - - - -
-
-

- -

-
-
- This is the first item's accordion body. It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. -
-
-
-
-

- -

-
-
- This is the second item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. -
-
-
-
-

- -

-
-
- This is the third item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow. -
-
-
-
- - - Link here -

This is the title

-

This is not

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veritatis, at! Soluta quas sapiente eveniet. Officia placeat error alias itaque. Veritatis, aut animi! Iusto odit eaque voluptatum autem ipsa, explicabo ratione?

- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/6_frameworks/materialize/materialize.html b/Code/matthew/html_css/lectures/6_frameworks/materialize/materialize.html deleted file mode 100644 index a548c6d2..00000000 --- a/Code/matthew/html_css/lectures/6_frameworks/materialize/materialize.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Materialize Example - - - - - - - - - - Random link -

Hello there

-

Hello people

-

Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse commodi explicabo suscipit, error sequi tempore soluta cupiditate voluptatum. Reprehenderit saepe error aliquam corporis laudantium minus perferendis animi voluptatum pariatur perspiciatis!

- - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/6_frameworks/pico.html b/Code/matthew/html_css/lectures/6_frameworks/pico.html deleted file mode 100644 index 975c1c3f..00000000 --- a/Code/matthew/html_css/lectures/6_frameworks/pico.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - Pico Example - - - - - Link here -

This is a title

-

Something else

-

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Minus quod ab aut! Perferendis minus voluptas voluptatem voluptatibus corrupti magni architecto ea fugit reiciendis magnam provident aliquam, laboriosam ducimus sint corporis.

- - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/6_frameworks/style.css b/Code/matthew/html_css/lectures/6_frameworks/style.css deleted file mode 100644 index c0be0d41..00000000 --- a/Code/matthew/html_css/lectures/6_frameworks/style.css +++ /dev/null @@ -1,3 +0,0 @@ -.btn { - text-transform: lowercase; -} \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/6_frameworks/tailwind.html b/Code/matthew/html_css/lectures/6_frameworks/tailwind.html deleted file mode 100644 index 0ef21701..00000000 --- a/Code/matthew/html_css/lectures/6_frameworks/tailwind.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - Tailwind Example - - - - - - Link here -

This is a title

-

Something else

-

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Minus quod ab aut! Perferendis minus voluptas voluptatem voluptatibus corrupti magni architecto ea fugit reiciendis magnam provident aliquam, laboriosam ducimus sint corporis.

- - - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/7_responsive_design/bootstrap.html b/Code/matthew/html_css/lectures/7_responsive_design/bootstrap.html deleted file mode 100644 index afb6ac4a..00000000 --- a/Code/matthew/html_css/lectures/7_responsive_design/bootstrap.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - Responsive Design - - - - - -
-

Class Kiwi

- -
-
- -
-
-
-

Title 1

-

- Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nihil earum - rerum porro ducimus, rem dolorum, nisi qui possimus, assumenda - quisquam ipsum aliquam nostrum velit exercitationem harum similique. - Dolorem, nostrum sequi. -

-
-
-

Title 2

-

- Architecto corrupti, veritatis ullam facilis odit nihil, deleniti - soluta accusantium, corporis iste dolore! A itaque deleniti - dignissimos cum, consequuntur natus aliquam nemo ex aut non obcaecati - ipsum perferendis reiciendis exercitationem. -

-
-
-

Title 3

-

- Pariatur voluptas ratione illo asperiores ad, non fugiat. Harum, saepe - veniam. Facere provident reiciendis odit aliquam repudiandae eligendi. - Ipsa suscipit delectus deleniti officiis quod deserunt asperiores - blanditiis amet corrupti quaerat! -

-
-
-

Title 4

-

- Culpa quisquam, eos sapiente, aliquid fuga dolorem repudiandae totam, - in molestias iste itaque ipsa! Quod adipisci possimus, natus sunt rem - voluptate odio obcaecati sit nihil suscipit nam harum. Nostrum, rerum. -

-
-
-

Title 5

-

- Qui odio aspernatur vero voluptatum, similique minus blanditiis et - cupiditate autem quia atque expedita, ducimus sequi, non vel totam ab. - Libero cumque eos assumenda dolorem officia, expedita sint dolorum - itaque! -

-
-
-

Title 6

-

- Deserunt perspiciatis excepturi ipsum consequatur aperiam quod veniam - distinctio doloribus. Velit, dignissimos sapiente error qui fugit, - ipsam ipsa cupiditate, illum eos expedita odio nesciunt omnis tenetur. - Officiis molestias aliquam quos! -

-
-
-
©2022 Class Kiwi
- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/7_responsive_design/index.html b/Code/matthew/html_css/lectures/7_responsive_design/index.html deleted file mode 100644 index 98c09329..00000000 --- a/Code/matthew/html_css/lectures/7_responsive_design/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - Responsive Design - - - -
-

Class Kiwi

- -
-
- -
-
-
-

Title 1

-

- Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nihil earum - rerum porro ducimus, rem dolorum, nisi qui possimus, assumenda - quisquam ipsum aliquam nostrum velit exercitationem harum similique. - Dolorem, nostrum sequi. -

-
-
-

Title 2

-

- Architecto corrupti, veritatis ullam facilis odit nihil, deleniti - soluta accusantium, corporis iste dolore! A itaque deleniti - dignissimos cum, consequuntur natus aliquam nemo ex aut non obcaecati - ipsum perferendis reiciendis exercitationem. -

-
-
-

Title 3

-

- Pariatur voluptas ratione illo asperiores ad, non fugiat. Harum, saepe - veniam. Facere provident reiciendis odit aliquam repudiandae eligendi. - Ipsa suscipit delectus deleniti officiis quod deserunt asperiores - blanditiis amet corrupti quaerat! -

-
-
-

Title 4

-

- Culpa quisquam, eos sapiente, aliquid fuga dolorem repudiandae totam, - in molestias iste itaque ipsa! Quod adipisci possimus, natus sunt rem - voluptate odio obcaecati sit nihil suscipit nam harum. Nostrum, rerum. -

-
-
-

Title 5

-

- Qui odio aspernatur vero voluptatum, similique minus blanditiis et - cupiditate autem quia atque expedita, ducimus sequi, non vel totam ab. - Libero cumque eos assumenda dolorem officia, expedita sint dolorum - itaque! -

-
-
-

Title 6

-

- Deserunt perspiciatis excepturi ipsum consequatur aperiam quod veniam - distinctio doloribus. Velit, dignissimos sapiente error qui fugit, - ipsam ipsa cupiditate, illum eos expedita odio nesciunt omnis tenetur. - Officiis molestias aliquam quos! -

-
-
-
©2022 Class Kiwi
- - \ No newline at end of file diff --git a/Code/matthew/html_css/lectures/7_responsive_design/style.css b/Code/matthew/html_css/lectures/7_responsive_design/style.css deleted file mode 100644 index fc9265ea..00000000 --- a/Code/matthew/html_css/lectures/7_responsive_design/style.css +++ /dev/null @@ -1,106 +0,0 @@ -:root { - /* font-size: 20px; */ -} -body { - font-size: 20px; - display: flex; - flex-direction: column; - justify-content: center; -} - -body > * { - /* border: 2px solid red; */ - /* margin: 4px; */ -} - - -h1 { - text-align: center; -} - -.links { - - display: flex; - flex-direction: column; -} - -.links > a{ - border: 1px solid black; - background-color: rgb(149, 212, 231); - margin: .5em .25em; - box-shadow: inset 2px 2px 6px 0 rgba(0, 0, 0, 0.281); - padding: .25em 0; - text-align: center; - text-decoration: none; -} - -img { - width: 100%; - margin-bottom: 1.5em; - -} - -main { - display: flex; - flex-direction: column; - align-items: center; -} -section { - border: 1px solid black; - margin-bottom: 1em; - max-width: 54ch; - align-items: center; - -} -section > h1 { - text-decoration: underline; -} - -section p { - text-align: center; -} - -/* tablet styles */ -@media screen and (min-width: 768px) { - - body { - /* background-color: grey; */ - } - .links { - flex-direction: row; - justify-content: space-evenly; - } - - .hero { - display: flex; - justify-content: center; - } - img { - width: 75%; - } -} - -/* desktop styles */ -@media screen and (min-width:1440px) { - header { - display: flex; - justify-content: space-between; - align-items: center; - } - - .links { - display: block; - } - - img { - max-width: 900px; - } - main { - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - } - section { - margin: 1em; - } -} \ No newline at end of file From 14c8710becd2e372dff77905ba3002e2895076ef Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Thu, 24 Mar 2022 20:51:24 -0700 Subject: [PATCH 07/20] pushing django notes --- .../django/labs/01_django_redo/manage.py | 22 ++++ .../unit_converter_app}/__init__.py | 0 .../unit_converter_app}/admin.py | 0 .../01_django_redo/unit_converter_app/apps.py | 6 + .../migrations/__init__.py | 0 .../unit_converter_app}/models.py | 0 .../templates/unit_converter_app/index.html | 58 ++++++++ .../templates/unit_converter_app/result.html | 14 ++ .../unit_converter_app}/tests.py | 0 .../01_django_redo/unit_converter_app/urls.py | 18 +++ .../unit_converter_app/views.py | 15 +++ .../unit_converter_proj}/__init__.py | 0 .../unit_converter_proj/asgi.py | 16 +++ .../unit_converter_proj/settings.py | 124 ++++++++++++++++++ .../unit_converter_proj/urls.py | 22 ++++ .../unit_converter_proj/wsgi.py | 16 +++ .../01_app_setup/hello_app/__init__.py} | 0 .../lectures/01_app_setup/hello_app/admin.py | 3 + .../01_app_setup}/hello_app/apps.py | 0 .../hello_app/migrations/__init__.py | 0 .../lectures/01_app_setup/hello_app/models.py | 3 + .../01_app_setup/hello_app/static/style.css | 0 .../hello_app/templates/hello_app/index.html | 0 .../lectures/01_app_setup/hello_app/tests.py | 3 + .../01_app_setup}/hello_app/urls.py | 0 .../01_app_setup}/hello_app/views.py | 0 .../01_app_setup/kiwi_first_proj/__init__.py | 0 .../01_app_setup}/kiwi_first_proj/asgi.py | 0 .../01_app_setup}/kiwi_first_proj/settings.py | 0 .../01_app_setup}/kiwi_first_proj/urls.py | 0 .../01_app_setup}/kiwi_first_proj/wsgi.py | 0 .../{ => lectures/01_app_setup}/manage.py | 0 32 files changed, 320 insertions(+) create mode 100755 Code/matthew/django/labs/01_django_redo/manage.py rename Code/matthew/django/{hello_app => labs/01_django_redo/unit_converter_app}/__init__.py (100%) rename Code/matthew/django/{hello_app => labs/01_django_redo/unit_converter_app}/admin.py (100%) create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_app/apps.py rename Code/matthew/django/{hello_app => labs/01_django_redo/unit_converter_app}/migrations/__init__.py (100%) rename Code/matthew/django/{hello_app => labs/01_django_redo/unit_converter_app}/models.py (100%) create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html rename Code/matthew/django/{hello_app => labs/01_django_redo/unit_converter_app}/tests.py (100%) create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py rename Code/matthew/django/{kiwi_first_proj => labs/01_django_redo/unit_converter_proj}/__init__.py (100%) create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_proj/asgi.py create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_proj/settings.py create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_proj/urls.py create mode 100644 Code/matthew/django/labs/01_django_redo/unit_converter_proj/wsgi.py rename Code/matthew/django/{hello_app/static/style.css => lectures/01_app_setup/hello_app/__init__.py} (100%) create mode 100644 Code/matthew/django/lectures/01_app_setup/hello_app/admin.py rename Code/matthew/django/{ => lectures/01_app_setup}/hello_app/apps.py (100%) create mode 100644 Code/matthew/django/lectures/01_app_setup/hello_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/01_app_setup/hello_app/models.py create mode 100644 Code/matthew/django/lectures/01_app_setup/hello_app/static/style.css rename Code/matthew/django/{ => lectures/01_app_setup}/hello_app/templates/hello_app/index.html (100%) create mode 100644 Code/matthew/django/lectures/01_app_setup/hello_app/tests.py rename Code/matthew/django/{ => lectures/01_app_setup}/hello_app/urls.py (100%) rename Code/matthew/django/{ => lectures/01_app_setup}/hello_app/views.py (100%) create mode 100644 Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/__init__.py rename Code/matthew/django/{ => lectures/01_app_setup}/kiwi_first_proj/asgi.py (100%) rename Code/matthew/django/{ => lectures/01_app_setup}/kiwi_first_proj/settings.py (100%) rename Code/matthew/django/{ => lectures/01_app_setup}/kiwi_first_proj/urls.py (100%) rename Code/matthew/django/{ => lectures/01_app_setup}/kiwi_first_proj/wsgi.py (100%) rename Code/matthew/django/{ => lectures/01_app_setup}/manage.py (100%) diff --git a/Code/matthew/django/labs/01_django_redo/manage.py b/Code/matthew/django/labs/01_django_redo/manage.py new file mode 100755 index 00000000..707d435e --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/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', 'unit_converter_proj.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/matthew/django/hello_app/__init__.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/__init__.py similarity index 100% rename from Code/matthew/django/hello_app/__init__.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_app/__init__.py diff --git a/Code/matthew/django/hello_app/admin.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/admin.py similarity index 100% rename from Code/matthew/django/hello_app/admin.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_app/admin.py diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/apps.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/apps.py new file mode 100644 index 00000000..7f259c7f --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class UnitConverterAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'unit_converter_app' diff --git a/Code/matthew/django/hello_app/migrations/__init__.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/migrations/__init__.py similarity index 100% rename from Code/matthew/django/hello_app/migrations/__init__.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_app/migrations/__init__.py diff --git a/Code/matthew/django/hello_app/models.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/models.py similarity index 100% rename from Code/matthew/django/hello_app/models.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_app/models.py diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html new file mode 100644 index 00000000..355b89dd --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html @@ -0,0 +1,58 @@ + + + + + + + Unit Converter + + +

Unit Converter

+ +
+ {% csrf_token %} + + +
+ + +
+ +
+

Enter the units you are using

+ + + + + + + + + +
+ +
+

Enter the units you wish to convert to

+ + + + + + + + + +
+ + +
+ + + + diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html new file mode 100644 index 00000000..fe391c78 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html @@ -0,0 +1,14 @@ + + + + + + + Results + + +

Results

+ + {{% distance %}} + + diff --git a/Code/matthew/django/hello_app/tests.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/tests.py similarity index 100% rename from Code/matthew/django/hello_app/tests.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_app/tests.py diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py new file mode 100644 index 00000000..2fc33978 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py @@ -0,0 +1,18 @@ +from django.urls import path, include +from . import views +# . :importing the views from the views file in the same directory + +# +app_name = 'unit converter' + +urlpatterns = [ + # 8000/ucp + path('', views.index, name='index'), + + + path('result/', views.forms, name='forms') + + # 8000/rps/result + # path('result/', views.result, name='result'), + +] diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py new file mode 100644 index 00000000..d992cda1 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py @@ -0,0 +1,15 @@ +from django.shortcuts import render + +# Create your views here. + + +def index(request): + + return render(request, 'unit_converter_app/index.html') + + +# request.POST is grabbing the information inside of the from submission +def forms(request): + form_post = request.POST + # print(form_post) + return (request, 'unit_converter_app/result.html', form_post) diff --git a/Code/matthew/django/kiwi_first_proj/__init__.py b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/__init__.py similarity index 100% rename from Code/matthew/django/kiwi_first_proj/__init__.py rename to Code/matthew/django/labs/01_django_redo/unit_converter_proj/__init__.py diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_proj/asgi.py b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/asgi.py new file mode 100644 index 00000000..6c082a5d --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for unit_converter_proj 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', 'unit_converter_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_proj/settings.py b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/settings.py new file mode 100644 index 00000000..17368170 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for unit_converter_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-29itg#5d48)-=q32_h*d159m_29+t!)o#ka4px32c6=58((!8s' + +# 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', + 'unit_converter_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 = 'unit_converter_proj.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 = 'unit_converter_proj.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 = 'UTC' + +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/matthew/django/labs/01_django_redo/unit_converter_proj/urls.py b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/urls.py new file mode 100644 index 00000000..92c3b177 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/urls.py @@ -0,0 +1,22 @@ +"""unit_converter_proj 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('ucp', include('unit_converter_app.urls')) +] diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_proj/wsgi.py b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/wsgi.py new file mode 100644 index 00000000..4eaa5183 --- /dev/null +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for unit_converter_proj 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', 'unit_converter_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/hello_app/static/style.css b/Code/matthew/django/lectures/01_app_setup/hello_app/__init__.py similarity index 100% rename from Code/matthew/django/hello_app/static/style.css rename to Code/matthew/django/lectures/01_app_setup/hello_app/__init__.py diff --git a/Code/matthew/django/lectures/01_app_setup/hello_app/admin.py b/Code/matthew/django/lectures/01_app_setup/hello_app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/Code/matthew/django/lectures/01_app_setup/hello_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Code/matthew/django/hello_app/apps.py b/Code/matthew/django/lectures/01_app_setup/hello_app/apps.py similarity index 100% rename from Code/matthew/django/hello_app/apps.py rename to Code/matthew/django/lectures/01_app_setup/hello_app/apps.py diff --git a/Code/matthew/django/lectures/01_app_setup/hello_app/migrations/__init__.py b/Code/matthew/django/lectures/01_app_setup/hello_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/01_app_setup/hello_app/models.py b/Code/matthew/django/lectures/01_app_setup/hello_app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/Code/matthew/django/lectures/01_app_setup/hello_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Code/matthew/django/lectures/01_app_setup/hello_app/static/style.css b/Code/matthew/django/lectures/01_app_setup/hello_app/static/style.css new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/hello_app/templates/hello_app/index.html b/Code/matthew/django/lectures/01_app_setup/hello_app/templates/hello_app/index.html similarity index 100% rename from Code/matthew/django/hello_app/templates/hello_app/index.html rename to Code/matthew/django/lectures/01_app_setup/hello_app/templates/hello_app/index.html diff --git a/Code/matthew/django/lectures/01_app_setup/hello_app/tests.py b/Code/matthew/django/lectures/01_app_setup/hello_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/01_app_setup/hello_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/hello_app/urls.py b/Code/matthew/django/lectures/01_app_setup/hello_app/urls.py similarity index 100% rename from Code/matthew/django/hello_app/urls.py rename to Code/matthew/django/lectures/01_app_setup/hello_app/urls.py diff --git a/Code/matthew/django/hello_app/views.py b/Code/matthew/django/lectures/01_app_setup/hello_app/views.py similarity index 100% rename from Code/matthew/django/hello_app/views.py rename to Code/matthew/django/lectures/01_app_setup/hello_app/views.py diff --git a/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/__init__.py b/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/kiwi_first_proj/asgi.py b/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/asgi.py similarity index 100% rename from Code/matthew/django/kiwi_first_proj/asgi.py rename to Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/asgi.py diff --git a/Code/matthew/django/kiwi_first_proj/settings.py b/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/settings.py similarity index 100% rename from Code/matthew/django/kiwi_first_proj/settings.py rename to Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/settings.py diff --git a/Code/matthew/django/kiwi_first_proj/urls.py b/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/urls.py similarity index 100% rename from Code/matthew/django/kiwi_first_proj/urls.py rename to Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/urls.py diff --git a/Code/matthew/django/kiwi_first_proj/wsgi.py b/Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/wsgi.py similarity index 100% rename from Code/matthew/django/kiwi_first_proj/wsgi.py rename to Code/matthew/django/lectures/01_app_setup/kiwi_first_proj/wsgi.py diff --git a/Code/matthew/django/manage.py b/Code/matthew/django/lectures/01_app_setup/manage.py similarity index 100% rename from Code/matthew/django/manage.py rename to Code/matthew/django/lectures/01_app_setup/manage.py From ad700fb47da9b9e9662b4cdda6d872f08be2b119 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Thu, 24 Mar 2022 21:53:23 -0700 Subject: [PATCH 08/20] adding finished django Lab 1 --- .../templates/unit_converter_app/index.html | 14 +-- .../templates/unit_converter_app/result.html | 8 +- .../01_django_redo/unit_converter_app/urls.py | 2 +- .../unit_converter_app/views.py | 90 ++++++++++++++++++- 4 files changed, 103 insertions(+), 11 deletions(-) diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html index 355b89dd..f6b00df9 100644 --- a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html @@ -9,7 +9,7 @@

Unit Converter

-
+ {% csrf_token %} @@ -28,26 +28,26 @@

Unit Converter

Enter the units you are using

- + - + - +

Enter the units you wish to convert to

- + - + - +
diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html index fe391c78..c7d253e0 100644 --- a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/result.html @@ -9,6 +9,12 @@

Results

- {{% distance %}} +

+ You converted {{distance}}{{units}} into + {{converted_output}}{{units_to_convert}} +

+ + distance {{ distance }} units {{units}} converted units {{converted_output}} + units to convert {{units_to_convert}} diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py index 2fc33978..84c5b16d 100644 --- a/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/urls.py @@ -10,7 +10,7 @@ path('', views.index, name='index'), - path('result/', views.forms, name='forms') + path('/result/', views.forms, name='forms') # 8000/rps/result # path('result/', views.result, name='result'), diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py b/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py index d992cda1..d740b123 100644 --- a/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/views.py @@ -1,3 +1,4 @@ + from django.shortcuts import render # Create your views here. @@ -11,5 +12,90 @@ def index(request): # request.POST is grabbing the information inside of the from submission def forms(request): form_post = request.POST - # print(form_post) - return (request, 'unit_converter_app/result.html', form_post) + + #EXAMPLE: distance=form_post['distance'] + + distance = form_post['distance'] + units = form_post['user_units'] + units_to_convert = form_post['conversion_units'] + + def feet_to_meters(x): + converted_ft = float(x) * .3048 + return converted_ft + + def mile_to_meters(x): + converted_mi = float(x) * 1609.34 + return converted_mi + + def km_to_meters(x): + converted_km = float(x) * 1000 + return converted_km + + def meters_to_feet(x): + converted_ft = float(x) * 3.28084 + return converted_ft + + def meters_to_mile(x): + converted_mi = float(x) * .000621371 + return converted_mi + + def meters_to_km(x): + converted_km = float(x) * .001 + return converted_km + + if units.lower() == 'mi' and units_to_convert.lower() == 'km': + converted_output = meters_to_km(mile_to_meters(distance)) + print(f'\n {distance}mi is {converted_output}km') + + elif units.lower() == 'mi' and units_to_convert.lower() == 'm': + converted_output = mile_to_meters(distance) + print(f'\n {distance}mi is {converted_output}m') + + elif units.lower() == 'mi' and units_to_convert.lower() == 'ft': + converted_output = meters_to_feet(mile_to_meters(distance)) + print(f'\n {distance}mi is {converted_output}ft') + + elif units.lower() == 'km' and units_to_convert.lower() == 'mi': + converted_output = meters_to_mile(km_to_meters(distance)) + print(f'\n {distance}km is {converted_output}mi') + + elif units.lower() == 'km' and units_to_convert.lower() == 'm': + converted_output = km_to_meters(distance) + print(f'\n {distance}km is {converted_output}m') + + elif units.lower() == 'km' and units_to_convert.lower() == 'ft': + converted_output = meters_to_feet(km_to_meters(distance)) + print(f'\n {distance}km is {converted_output}ft') + + elif units.lower() == 'ft' and units_to_convert.lower() == 'mi': + converted_output = mile_to_meters(feet_to_meters(distance)) + print(f'\n {distance}ft is {converted_output}mi') + + elif units.lower() == 'ft' and units_to_convert.lower() == 'm': + converted_output = feet_to_meters(distance) + print(f'\n {distance}ft is {converted_output}m') + + elif units.lower() == 'ft' and units_to_convert.lower() == 'km': + converted_output = meters_to_km(feet_to_meters(distance)) + print(f'\n {distance}mi is {converted_output}ft') + + elif units.lower() == 'm' and units_to_convert.lower() == 'ft': + converted_output = meters_to_feet(distance) + print(f'\n {distance}km is {converted_output}ft') + + elif units.lower() == 'm' and units_to_convert.lower() == 'mi': + converted_output = meters_to_mile(distance) + print(f'\n {distance}ft is {converted_output}mi') + + elif units.lower() == 'm' and units_to_convert.lower() == 'km': + converted_output = meters_to_km + print(f'\n {distance}mi is {converted_output}ft') + + context = { + 'distance': distance, + 'converted_output': converted_output, + 'units': units, + 'units_to_convert': units_to_convert, + } + + return render(request, 'unit_converter_app/result.html', context) From add58a3f5fb3112fd310028cc878578c7a09c8b7 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Tue, 29 Mar 2022 21:21:29 -0700 Subject: [PATCH 09/20] Adding lectures from 28 march and 29 march --- .../django/lectures/04_/christmas/__init__.py | 0 .../django/lectures/04_/christmas/asgi.py | 16 +++ .../django/lectures/04_/christmas/settings.py | 125 ++++++++++++++++++ .../django/lectures/04_/christmas/urls.py | 22 +++ .../django/lectures/04_/christmas/wsgi.py | 16 +++ .../lectures/04_/christmas_app/__init__.py | 0 .../lectures/04_/christmas_app/admin.py | 3 + .../django/lectures/04_/christmas_app/apps.py | 6 + .../04_/christmas_app/migrations/__init__.py | 0 .../lectures/04_/christmas_app/models.py | 3 + .../templates/christmas_app/index.html | 21 +++ .../lectures/04_/christmas_app/tests.py | 3 + .../django/lectures/04_/christmas_app/urls.py | 24 ++++ .../lectures/04_/christmas_app/views.py | 18 +++ Code/matthew/django/lectures/04_/manage.py | 22 +++ .../lectures/05_/chirpy_app/__init__.py | 0 .../django/lectures/05_/chirpy_app/admin.py | 5 + .../django/lectures/05_/chirpy_app/apps.py | 6 + .../05_/chirpy_app/migrations/0001_initial.py | 27 ++++ .../05_/chirpy_app/migrations/__init__.py | 0 .../django/lectures/05_/chirpy_app/models.py | 19 +++ .../templates/chirpy_app/index.html | 18 +++ .../django/lectures/05_/chirpy_app/tests.py | 3 + .../django/lectures/05_/chirpy_app/urls.py | 23 ++++ .../django/lectures/05_/chirpy_app/views.py | 35 +++++ .../lectures/05_/chirpy_proj/__init__.py | 0 .../django/lectures/05_/chirpy_proj/asgi.py | 16 +++ .../lectures/05_/chirpy_proj/settings.py | 125 ++++++++++++++++++ .../django/lectures/05_/chirpy_proj/urls.py | 22 +++ .../django/lectures/05_/chirpy_proj/wsgi.py | 16 +++ Code/matthew/django/lectures/05_/manage.py | 22 +++ 31 files changed, 616 insertions(+) create mode 100644 Code/matthew/django/lectures/04_/christmas/__init__.py create mode 100644 Code/matthew/django/lectures/04_/christmas/asgi.py create mode 100644 Code/matthew/django/lectures/04_/christmas/settings.py create mode 100644 Code/matthew/django/lectures/04_/christmas/urls.py create mode 100644 Code/matthew/django/lectures/04_/christmas/wsgi.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/__init__.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/admin.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/apps.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/models.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/templates/christmas_app/index.html create mode 100644 Code/matthew/django/lectures/04_/christmas_app/tests.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/urls.py create mode 100644 Code/matthew/django/lectures/04_/christmas_app/views.py create mode 100755 Code/matthew/django/lectures/04_/manage.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/__init__.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/admin.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/apps.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/models.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/tests.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/urls.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_app/views.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_proj/__init__.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_proj/asgi.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_proj/settings.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_proj/urls.py create mode 100644 Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py create mode 100755 Code/matthew/django/lectures/05_/manage.py diff --git a/Code/matthew/django/lectures/04_/christmas/__init__.py b/Code/matthew/django/lectures/04_/christmas/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/04_/christmas/asgi.py b/Code/matthew/django/lectures/04_/christmas/asgi.py new file mode 100644 index 00000000..cff24ad2 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for christmas 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', 'christmas.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/04_/christmas/settings.py b/Code/matthew/django/lectures/04_/christmas/settings.py new file mode 100644 index 00000000..fde1fa54 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas/settings.py @@ -0,0 +1,125 @@ +""" +Django settings for christmas project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-y)w9o$74i$qmtv_o*%mt*xp^z=o4sr-6o^pd@e=u0y!2vx2wn*' + +# 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', + # + 'christmas_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 = 'christmas.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 = 'christmas.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/Los_Angeles' + +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/matthew/django/lectures/04_/christmas/urls.py b/Code/matthew/django/lectures/04_/christmas/urls.py new file mode 100644 index 00000000..fd6a5494 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas/urls.py @@ -0,0 +1,22 @@ +"""christmas 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('christmas_app.urls')) +] diff --git a/Code/matthew/django/lectures/04_/christmas/wsgi.py b/Code/matthew/django/lectures/04_/christmas/wsgi.py new file mode 100644 index 00000000..890d8a62 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for christmas 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', 'christmas.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/lectures/04_/christmas_app/__init__.py b/Code/matthew/django/lectures/04_/christmas_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/04_/christmas_app/admin.py b/Code/matthew/django/lectures/04_/christmas_app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Code/matthew/django/lectures/04_/christmas_app/apps.py b/Code/matthew/django/lectures/04_/christmas_app/apps.py new file mode 100644 index 00000000..290b40c9 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChristmasAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'christmas_app' diff --git a/Code/matthew/django/lectures/04_/christmas_app/migrations/__init__.py b/Code/matthew/django/lectures/04_/christmas_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/04_/christmas_app/models.py b/Code/matthew/django/lectures/04_/christmas_app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Code/matthew/django/lectures/04_/christmas_app/templates/christmas_app/index.html b/Code/matthew/django/lectures/04_/christmas_app/templates/christmas_app/index.html new file mode 100644 index 00000000..34b00c5f --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/templates/christmas_app/index.html @@ -0,0 +1,21 @@ + + + + + + + Document + + +

Christmas

+ + {% if xmas %} +

YES

+ + {% else %} + +

NO

+ + {% endif %} + + diff --git a/Code/matthew/django/lectures/04_/christmas_app/tests.py b/Code/matthew/django/lectures/04_/christmas_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/04_/christmas_app/urls.py b/Code/matthew/django/lectures/04_/christmas_app/urls.py new file mode 100644 index 00000000..e300e82c --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/urls.py @@ -0,0 +1,24 @@ +"""christmas 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.urls import path, include +from . import views + +app_name = 'christmas_app' + +urlpatterns = [ + path('home/', views.home, name='home') +] diff --git a/Code/matthew/django/lectures/04_/christmas_app/views.py b/Code/matthew/django/lectures/04_/christmas_app/views.py new file mode 100644 index 00000000..c84aca4b --- /dev/null +++ b/Code/matthew/django/lectures/04_/christmas_app/views.py @@ -0,0 +1,18 @@ +from multiprocessing import context +from django.shortcuts import render +import datetime as dt + +# Create your views here. + + +def home(request): + now = dt.datetime.now() + + print(now) + + context = { + 'now': now, + 'xmas': now.month == 12 and now.day == 25 + } + + return render(request, 'christmas_app/index.html', context) diff --git a/Code/matthew/django/lectures/04_/manage.py b/Code/matthew/django/lectures/04_/manage.py new file mode 100755 index 00000000..50361c5c --- /dev/null +++ b/Code/matthew/django/lectures/04_/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', 'christmas.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/matthew/django/lectures/05_/chirpy_app/__init__.py b/Code/matthew/django/lectures/05_/chirpy_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_/chirpy_app/admin.py b/Code/matthew/django/lectures/05_/chirpy_app/admin.py new file mode 100644 index 00000000..23976cb8 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from . models import Cheep +# Register your models here. + +admin.site.register(Cheep) diff --git a/Code/matthew/django/lectures/05_/chirpy_app/apps.py b/Code/matthew/django/lectures/05_/chirpy_app/apps.py new file mode 100644 index 00000000..b0149d00 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChirpyAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chirpy_app' diff --git a/Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py b/Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py new file mode 100644 index 00000000..9d40d805 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.3 on 2022-03-30 02:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Cheep', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('chirp', models.CharField(max_length=125)), + ('date_published', models.DateTimeField(auto_now=True)), + ('deleted', models.BooleanField(default=False)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/Code/matthew/django/lectures/05_/chirpy_app/migrations/__init__.py b/Code/matthew/django/lectures/05_/chirpy_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_/chirpy_app/models.py b/Code/matthew/django/lectures/05_/chirpy_app/models.py new file mode 100644 index 00000000..860c4d0a --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/models.py @@ -0,0 +1,19 @@ +from django.contrib.auth.models import User +from django.db import models + + +# For importing ~User objects~ (username, password, email, first_name, last_name) + + +# Create your models here. + +class Cheep(models.Model): + chirp = models.CharField(max_length=125) + # auto_now gives timestamp based off settings time_zone + date_published = models.DateTimeField(auto_now=True) + # on_delete=CASCADE - deletes all user data and associated information + user = models.ForeignKey(User, on_delete=models.CASCADE) + deleted = models.BooleanField(default=False) + + def __str__(self): + return f'{self.user}: {self.date_published} -- {self.chirp}' diff --git a/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html b/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html new file mode 100644 index 00000000..4b5ce492 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html @@ -0,0 +1,18 @@ + + + + + + + Chirp + + +

Welcome to Class Kiwi Chirpy

+ + {% csrf_token %} {{form}} + + + + + + diff --git a/Code/matthew/django/lectures/05_/chirpy_app/tests.py b/Code/matthew/django/lectures/05_/chirpy_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/05_/chirpy_app/urls.py b/Code/matthew/django/lectures/05_/chirpy_app/urls.py new file mode 100644 index 00000000..1e1714e2 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/urls.py @@ -0,0 +1,23 @@ + + +"""chirpy_app URL Configuration + +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.urls import path +from . import views + + +urlpatterns = [ + path('', views.index, name='index'), + path('save/', views.save_cheep, name='save') +] diff --git a/Code/matthew/django/lectures/05_/chirpy_app/views.py b/Code/matthew/django/lectures/05_/chirpy_app/views.py new file mode 100644 index 00000000..96457ecf --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_app/views.py @@ -0,0 +1,35 @@ + +from django.shortcuts import render +from django import forms +from django.http import HttpResponseRedirect +from django.urls import reverse +from .models import Cheep +# Create your views here. + + +class NewCheepForm(forms.Form): + text1 = forms.CharField(label='Cheep your thoughts here', widget=forms.TextInput( + attrs={'placeholder': 'Cheep away'}), max_length=120) + + +def index(request): + + return render(request, 'chirpy_app/index.html', { + 'form': NewCheepForm(), + }) + + +def save_cheep(request): + if request.method == 'POST': + form = NewCheepForm(request.POST) + if form.is_valid(): + text = form.cleaned_data['text1'] + user = request.user + # Linking Cheep() in models.py and automatically updating chirp and user + + cheep = Cheep() # Ex: cheep.date_published + cheep.chirp = text + cheep.user = user + cheep.save() + + return HttpResponseRedirect(reverse('index')) diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/__init__.py b/Code/matthew/django/lectures/05_/chirpy_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/asgi.py b/Code/matthew/django/lectures/05_/chirpy_proj/asgi.py new file mode 100644 index 00000000..a8c08843 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for chirpy_proj 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', 'chirpy_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/settings.py b/Code/matthew/django/lectures/05_/chirpy_proj/settings.py new file mode 100644 index 00000000..294fec4c --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_proj/settings.py @@ -0,0 +1,125 @@ +""" +Django settings for chirpy_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-(1^puj&==bj1hrk)lxjlj#76p6)&ny!#jt#v^iu_2ws4fi8n0i' + +# 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', + # + 'chirpy_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 = 'chirpy_proj.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 = 'chirpy_proj.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/Los_Angeles' + +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/matthew/django/lectures/05_/chirpy_proj/urls.py b/Code/matthew/django/lectures/05_/chirpy_proj/urls.py new file mode 100644 index 00000000..38a7d057 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_proj/urls.py @@ -0,0 +1,22 @@ +"""chirpy_proj 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('chirp/', include('chirpy_app.urls')) +] diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py b/Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py new file mode 100644 index 00000000..a7d60919 --- /dev/null +++ b/Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for chirpy_proj 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', 'chirpy_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/lectures/05_/manage.py b/Code/matthew/django/lectures/05_/manage.py new file mode 100755 index 00000000..327acf62 --- /dev/null +++ b/Code/matthew/django/lectures/05_/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', 'chirpy_proj.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() From 7437a234ab75e2045a3bcfbd8940ae6ee1f2d4f3 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Thu, 31 Mar 2022 17:54:22 -0700 Subject: [PATCH 10/20] adding chirpy notes --- .../lectures/05_chirpy/chirpy_app/__init__.py | 0 .../lectures/05_chirpy/chirpy_app/admin.py | 5 + .../lectures/05_chirpy/chirpy_app/apps.py | 6 + .../chirpy_app/migrations/0001_initial.py | 27 ++++ .../chirpy_app/migrations/__init__.py | 0 .../lectures/05_chirpy/chirpy_app/models.py | 19 +++ .../templates/chirpy_app/index.html | 26 ++++ .../lectures/05_chirpy/chirpy_app/tests.py | 3 + .../lectures/05_chirpy/chirpy_app/urls.py | 23 ++++ .../lectures/05_chirpy/chirpy_app/views.py | 39 ++++++ .../05_chirpy/chirpy_proj/__init__.py | 0 .../lectures/05_chirpy/chirpy_proj/asgi.py | 16 +++ .../05_chirpy/chirpy_proj/settings.py | 125 ++++++++++++++++++ .../lectures/05_chirpy/chirpy_proj/urls.py | 22 +++ .../lectures/05_chirpy/chirpy_proj/wsgi.py | 16 +++ .../django/lectures/05_chirpy/manage.py | 22 +++ 16 files changed, 349 insertions(+) create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/__init__.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/admin.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/apps.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/0001_initial.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/models.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/templates/chirpy_app/index.html create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/tests.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/urls.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_app/views.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_proj/__init__.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_proj/asgi.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_proj/settings.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_proj/urls.py create mode 100644 Code/matthew/django/lectures/05_chirpy/chirpy_proj/wsgi.py create mode 100755 Code/matthew/django/lectures/05_chirpy/manage.py diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/__init__.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/admin.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/admin.py new file mode 100644 index 00000000..23976cb8 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from . models import Cheep +# Register your models here. + +admin.site.register(Cheep) diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/apps.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/apps.py new file mode 100644 index 00000000..b0149d00 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChirpyAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chirpy_app' diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/0001_initial.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/0001_initial.py new file mode 100644 index 00000000..9d40d805 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.3 on 2022-03-30 02:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Cheep', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('chirp', models.CharField(max_length=125)), + ('date_published', models.DateTimeField(auto_now=True)), + ('deleted', models.BooleanField(default=False)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/__init__.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/models.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/models.py new file mode 100644 index 00000000..860c4d0a --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/models.py @@ -0,0 +1,19 @@ +from django.contrib.auth.models import User +from django.db import models + + +# For importing ~User objects~ (username, password, email, first_name, last_name) + + +# Create your models here. + +class Cheep(models.Model): + chirp = models.CharField(max_length=125) + # auto_now gives timestamp based off settings time_zone + date_published = models.DateTimeField(auto_now=True) + # on_delete=CASCADE - deletes all user data and associated information + user = models.ForeignKey(User, on_delete=models.CASCADE) + deleted = models.BooleanField(default=False) + + def __str__(self): + return f'{self.user}: {self.date_published} -- {self.chirp}' diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/templates/chirpy_app/index.html b/Code/matthew/django/lectures/05_chirpy/chirpy_app/templates/chirpy_app/index.html new file mode 100644 index 00000000..956e2669 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/templates/chirpy_app/index.html @@ -0,0 +1,26 @@ + + + + + + + Chirp + + +

Welcome to Class Kiwi Chirpy

+
+ {% csrf_token %} {{form}} + + +
+ {% for cheep in cheeps %} +
    + {% comment %} Front end deletion {% endcomment %} + {% if cheep.deleted == False %} {{cheep}} {% endif %} +
+ + {% endfor %} + + + + diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/tests.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/urls.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/urls.py new file mode 100644 index 00000000..1e1714e2 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/urls.py @@ -0,0 +1,23 @@ + + +"""chirpy_app URL Configuration + +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.urls import path +from . import views + + +urlpatterns = [ + path('', views.index, name='index'), + path('save/', views.save_cheep, name='save') +] diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_app/views.py b/Code/matthew/django/lectures/05_chirpy/chirpy_app/views.py new file mode 100644 index 00000000..3153b0ad --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_app/views.py @@ -0,0 +1,39 @@ + +from django.shortcuts import render +from django import forms +from django.http import HttpResponseRedirect +from django.urls import reverse +from .models import Cheep +# Create your views here. + + +class NewCheepForm(forms.Form): + text1 = forms.CharField(label='Cheep your thoughts here', widget=forms.TextInput( + attrs={'placeholder': 'Cheep away'}), max_length=120) + + +def index(request): + cheeps = Cheep.objects.all().order_by('-date_published') + # Backend deletion + # cheeps = Cheep.objects.filter(deleted=False).order_by('-date_published') + + return render(request, 'chirpy_app/index.html', { + 'form': NewCheepForm(), + 'cheeps': cheeps + }) + + +def save_cheep(request): + if request.method == 'POST': + form = NewCheepForm(request.POST) + if form.is_valid(): + text = form.cleaned_data['text1'] + user = request.user + # Linking Cheep() in models.py and automatically updating chirp and user + + cheep = Cheep() # Ex: cheep.date_published + cheep.chirp = text + cheep.user = user + cheep.save() + + return HttpResponseRedirect(reverse('index')) diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_proj/__init__.py b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_proj/asgi.py b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/asgi.py new file mode 100644 index 00000000..a8c08843 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for chirpy_proj 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', 'chirpy_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_proj/settings.py b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/settings.py new file mode 100644 index 00000000..294fec4c --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/settings.py @@ -0,0 +1,125 @@ +""" +Django settings for chirpy_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-(1^puj&==bj1hrk)lxjlj#76p6)&ny!#jt#v^iu_2ws4fi8n0i' + +# 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', + # + 'chirpy_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 = 'chirpy_proj.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 = 'chirpy_proj.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/Los_Angeles' + +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/matthew/django/lectures/05_chirpy/chirpy_proj/urls.py b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/urls.py new file mode 100644 index 00000000..38a7d057 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/urls.py @@ -0,0 +1,22 @@ +"""chirpy_proj 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('chirp/', include('chirpy_app.urls')) +] diff --git a/Code/matthew/django/lectures/05_chirpy/chirpy_proj/wsgi.py b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/wsgi.py new file mode 100644 index 00000000..a7d60919 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/chirpy_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for chirpy_proj 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', 'chirpy_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/lectures/05_chirpy/manage.py b/Code/matthew/django/lectures/05_chirpy/manage.py new file mode 100755 index 00000000..327acf62 --- /dev/null +++ b/Code/matthew/django/lectures/05_chirpy/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', 'chirpy_proj.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() From 7d5820034385d11ff4447bf5a9e1bc5a1ea95a23 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Thu, 31 Mar 2022 18:05:19 -0700 Subject: [PATCH 11/20] adding lab 03.. almost finished' --- .../grocery_list/grocery_app/__init__.py | 0 .../grocery_list/grocery_app/admin.py | 7 + .../grocery_list/grocery_app/apps.py | 6 + .../grocery_app/migrations/0001_initial.py | 27 ++++ .../grocery_app/migrations/__init__.py | 0 .../grocery_list/grocery_app/models.py | 15 +++ .../templates/grocery_app/index.html | 34 +++++ .../grocery_list/grocery_app/tests.py | 3 + .../grocery_list/grocery_app/urls.py | 16 +++ .../grocery_list/grocery_app/views.py | 35 +++++ .../grocery_list/grocery_proj/__init__.py | 0 .../grocery_list/grocery_proj/asgi.py | 16 +++ .../grocery_list/grocery_proj/settings.py | 126 ++++++++++++++++++ .../grocery_list/grocery_proj/urls.py | 22 +++ .../grocery_list/grocery_proj/wsgi.py | 16 +++ .../03_grocery_list/grocery_list/manage.py | 22 +++ 16 files changed, 345 insertions(+) create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/__init__.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/apps.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/__init__.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/tests.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/__init__.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/asgi.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/urls.py create mode 100644 Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/wsgi.py create mode 100755 Code/matthew/django/labs/03_grocery_list/grocery_list/manage.py diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/__init__.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py new file mode 100644 index 00000000..c30e37a9 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from . models import List + +# Register your models here. + +admin.site.register(List) + diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/apps.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/apps.py new file mode 100644 index 00000000..87b0bfcb --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GroceryAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'grocery_app' diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py new file mode 100644 index 00000000..1ad73567 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.3 on 2022-03-31 04:04 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='List', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('new', models.CharField(max_length=50)), + ('date', models.DateTimeField(auto_now=True)), + ('delete', models.BooleanField(default=False)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/__init__.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py new file mode 100644 index 00000000..208b24c2 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py @@ -0,0 +1,15 @@ + +from django.db import models +from django.contrib.auth.models import User + +# Create your models here. + +class List(models.Model): + new= models.CharField( max_length=50) + # '%m/%d/%Y' + date= models.DateField( auto_now=True) + user= models.ForeignKey(User, on_delete= models.CASCADE) + delete= models.BooleanField(default=False) + + def __str__(self): + return F"{self.new}: {self.date}" diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html new file mode 100644 index 00000000..1ce8bdae --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html @@ -0,0 +1,34 @@ + + + + + + + Grocery list + + +
+ +
+ {{new}} + {% csrf_token %} + +
+
+
+
+ {% for i in folder %} +
    + {% comment %} {{i}} {% endcomment %} + {% if i.delete == False %} +
    + + +
    + + {% endif %} +
+ {% endfor %} +
+ + \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/tests.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py new file mode 100644 index 00000000..d67ee223 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py @@ -0,0 +1,16 @@ +"""grocery_app URL Configuration + +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') + +""" +from . import views +from django.urls import path + +urlpatterns = [ + # /list + path('list/', views.home, name='home' ), + path('save/', views.save, name='save' ) +] diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py new file mode 100644 index 00000000..fd59e617 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py @@ -0,0 +1,35 @@ +from hashlib import new +from django.shortcuts import render +from django import forms +from django.http import HttpResponseRedirect +from django.urls import reverse +from . models import List + +# Create your views here. +class new_list(forms.Form): + text= forms.CharField(label='',widget=forms.TextInput( + attrs={'placeholder': 'Add new item'}), max_length=10) + + +def home(request): + # folder= List.objects.all().order_by('date') + folder= List.objects.filter(delete= False).order_by('-date') + context= { + "new": new_list(), + 'folder': folder + } + return render(request, "grocery_app/index.html", context) + +def save(request): + if request.method == 'POST': + form= new_list(request.POST) + if form.is_valid(): + text= form.cleaned_data['text'] + user= request.user + + list= List() + list.new= text + list.user= user + list.save() + return HttpResponseRedirect(reverse('home')) + diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/__init__.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/asgi.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/asgi.py new file mode 100644 index 00000000..9012ee82 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for grocery_proj 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', 'grocery_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py new file mode 100644 index 00000000..cddbc222 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for grocery_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-0fbz7@^6glp0s=x4#e2tf9%dzave8%gqpbrh0lei)3qsip53t%' + +# 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', + # + 'grocery_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 = 'grocery_proj.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 = 'grocery_proj.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/Los_Angeles' + +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' +DATE_INPUT_FORMATS = ('%d-%m-%Y','%Y-%m-%d') diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/urls.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/urls.py new file mode 100644 index 00000000..b2ba1e8c --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/urls.py @@ -0,0 +1,22 @@ +"""grocery_proj 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('grocery_app.urls')) +] diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/wsgi.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/wsgi.py new file mode 100644 index 00000000..567bce68 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for grocery_proj 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', 'grocery_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/manage.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/manage.py new file mode 100755 index 00000000..f97e4e6d --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/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', 'grocery_proj.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() From dc302124b68022ee449e569790bad3e47e857e0b Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Mon, 4 Apr 2022 16:41:03 -0700 Subject: [PATCH 12/20] you can ignore lab 03 redo folder --- .../grocery_list/grocery_app/admin.py | 3 +- .../grocery_app/migrations/0001_initial.py | 4 +- .../grocery_list/grocery_app/models.py | 13 +- .../templates/grocery_app/index.html | 44 +++--- .../grocery_list/grocery_app/urls.py | 23 +++- .../grocery_list/grocery_app/views.py | 38 +++--- .../grocery_list/grocery_proj/settings.py | 3 +- .../redo/grocery_app}/__init__.py | 0 .../redo/grocery_app}/admin.py | 5 +- .../03_grocery_list/redo/grocery_app}/apps.py | 4 +- .../grocery_app}/migrations/0001_initial.py | 10 +- .../redo/grocery_app}/migrations/__init__.py | 0 .../redo/grocery_app/models.py | 12 ++ .../templates/grocery_app/index.html | 31 +++++ .../redo/grocery_app}/tests.py | 0 .../03_grocery_list/redo/grocery_app/urls.py | 25 ++++ .../03_grocery_list/redo/grocery_app/views.py | 41 ++++++ .../redo/grocery_proj}/__init__.py | 0 .../redo/grocery_proj}/asgi.py | 4 +- .../redo/grocery_proj}/settings.py | 12 +- .../redo/grocery_proj}/urls.py | 4 +- .../redo/grocery_proj}/wsgi.py | 4 +- .../03_grocery_list/redo}/manage.py | 2 +- .../django/lectures/05_/chirpy_app/models.py | 19 --- .../templates/chirpy_app/index.html | 18 --- .../django/lectures/05_/chirpy_app/views.py | 35 ----- .../06_template_inheritance/manage.py | 22 +++ .../routing_app/__init__.py | 0 .../routing_app/admin.py | 3 + .../routing_app/apps.py | 6 + .../routing_app/migrations/__init__.py | 0 .../routing_app/models.py | 3 + .../templates/routing_app/animation.html | 10 ++ .../templates/routing_app/base.html | 27 ++++ .../templates/routing_app/bio.html | 10 ++ .../templates/routing_app/blog.html | 10 ++ .../templates/routing_app/company.html | 10 ++ .../routing_app/tests.py | 3 + .../routing_app/urls.py | 21 +++ .../routing_app/views.py | 19 +++ .../routing_proj/__init__.py | 0 .../routing_proj/asgi.py | 16 +++ .../routing_proj/settings.py | 127 ++++++++++++++++++ .../routing_proj/urls.py | 22 +++ .../routing_proj/wsgi.py | 16 +++ .../static/css/styles.css | 13 ++ Code/matthew/django/lectures/07_/manage.py | 22 +++ .../lectures/07_/sessions_app/__init__.py | 0 .../django/lectures/07_/sessions_app/admin.py | 3 + .../django/lectures/07_/sessions_app/apps.py | 6 + .../07_/sessions_app/migrations/__init__.py | 0 .../lectures/07_/sessions_app/models.py | 3 + .../templates/sessions_app/add.html | 23 ++++ .../templates/sessions_app/index.html | 21 +++ .../django/lectures/07_/sessions_app/tests.py | 3 + .../chirpy_app => 07_/sessions_app}/urls.py | 11 +- .../django/lectures/07_/sessions_app/views.py | 38 ++++++ .../lectures/07_/sessions_proj/__init__.py | 0 .../django/lectures/07_/sessions_proj/asgi.py | 16 +++ .../lectures/07_/sessions_proj/settings.py | 125 +++++++++++++++++ .../django/lectures/07_/sessions_proj/urls.py | 22 +++ .../django/lectures/07_/sessions_proj/wsgi.py | 16 +++ 62 files changed, 842 insertions(+), 159 deletions(-) rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/__init__.py (100%) rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/admin.py (53%) rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/apps.py (60%) rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/migrations/0001_initial.py (68%) rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/migrations/__init__.py (100%) create mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/models.py create mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/templates/grocery_app/index.html rename Code/matthew/django/{lectures/05_/chirpy_app => labs/03_grocery_list/redo/grocery_app}/tests.py (100%) create mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/urls.py create mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/views.py rename Code/matthew/django/{lectures/05_/chirpy_proj => labs/03_grocery_list/redo/grocery_proj}/__init__.py (100%) rename Code/matthew/django/{lectures/05_/chirpy_proj => labs/03_grocery_list/redo/grocery_proj}/asgi.py (72%) rename Code/matthew/django/{lectures/05_/chirpy_proj => labs/03_grocery_list/redo/grocery_proj}/settings.py (92%) rename Code/matthew/django/{lectures/05_/chirpy_proj => labs/03_grocery_list/redo/grocery_proj}/urls.py (90%) rename Code/matthew/django/{lectures/05_/chirpy_proj => labs/03_grocery_list/redo/grocery_proj}/wsgi.py (72%) rename Code/matthew/django/{lectures/05_ => labs/03_grocery_list/redo}/manage.py (88%) delete mode 100644 Code/matthew/django/lectures/05_/chirpy_app/models.py delete mode 100644 Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html delete mode 100644 Code/matthew/django/lectures/05_/chirpy_app/views.py create mode 100755 Code/matthew/django/lectures/06_template_inheritance/manage.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/__init__.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/admin.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/apps.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/models.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/animation.html create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/base.html create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/bio.html create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/blog.html create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/company.html create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/tests.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/urls.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_app/views.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_proj/__init__.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_proj/asgi.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_proj/settings.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_proj/urls.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/routing_proj/wsgi.py create mode 100644 Code/matthew/django/lectures/06_template_inheritance/static/css/styles.css create mode 100755 Code/matthew/django/lectures/07_/manage.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/__init__.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/admin.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/apps.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/models.py create mode 100644 Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/add.html create mode 100644 Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/index.html create mode 100644 Code/matthew/django/lectures/07_/sessions_app/tests.py rename Code/matthew/django/lectures/{05_/chirpy_app => 07_/sessions_app}/urls.py (70%) create mode 100644 Code/matthew/django/lectures/07_/sessions_app/views.py create mode 100644 Code/matthew/django/lectures/07_/sessions_proj/__init__.py create mode 100644 Code/matthew/django/lectures/07_/sessions_proj/asgi.py create mode 100644 Code/matthew/django/lectures/07_/sessions_proj/settings.py create mode 100644 Code/matthew/django/lectures/07_/sessions_proj/urls.py create mode 100644 Code/matthew/django/lectures/07_/sessions_proj/wsgi.py diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py index c30e37a9..64a74eba 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/admin.py @@ -3,5 +3,4 @@ # Register your models here. -admin.site.register(List) - +admin.site.register(List) \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py index 1ad73567..b53f41f1 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.0.3 on 2022-03-31 04:04 +# Generated by Django 4.0.3 on 2022-04-04 19:37 from django.conf import settings from django.db import migrations, models @@ -19,7 +19,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('new', models.CharField(max_length=50)), - ('date', models.DateTimeField(auto_now=True)), + ('date', models.DateField(auto_now=True)), ('delete', models.BooleanField(default=False)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py index 208b24c2..c2f91c47 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/models.py @@ -1,15 +1,12 @@ - from django.db import models from django.contrib.auth.models import User - # Create your models here. class List(models.Model): - new= models.CharField( max_length=50) - # '%m/%d/%Y' - date= models.DateField( auto_now=True) - user= models.ForeignKey(User, on_delete= models.CASCADE) + new= models.CharField(max_length=50) + date= models.DateField(auto_now=True) + user= models.ForeignKey(User, on_delete=models.CASCADE) delete= models.BooleanField(default=False) - + def __str__(self): - return F"{self.new}: {self.date}" + return f'{self.new}: {self.date}' \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html index 1ce8bdae..1f6dbd54 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/templates/grocery_app/index.html @@ -4,31 +4,29 @@ - Grocery list + Grocery List -
- -
- {{new}} - {% csrf_token %} - +

Home

+ + + {% csrf_token %} + {{new_item}} + +
+ + {% for item in show_items %} + +
    + +
    + + +
    -
-
-
- {% for i in folder %} -
    - {% comment %} {{i}} {% endcomment %} - {% if i.delete == False %} -
    - - -
    - - {% endif %} -
- {% endfor %} -
+ + + {% endfor %} + \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py index d67ee223..4f1e87ef 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/urls.py @@ -1,16 +1,25 @@ -"""grocery_app URL Configuration +"""grocery_proj 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 . import views + from django.urls import path +from . import views urlpatterns = [ - # /list - path('list/', views.home, name='home' ), - path('save/', views.save, name='save' ) -] + # home/ + path('home/', views.home, name='home'), + path('save/', views.save, name='save'), + path('delete//', views.delete, name='delete'), +] \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py index fd59e617..0e7268d0 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_app/views.py @@ -1,35 +1,41 @@ -from hashlib import new -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render from django import forms from django.http import HttpResponseRedirect from django.urls import reverse from . models import List -# Create your views here. -class new_list(forms.Form): - text= forms.CharField(label='',widget=forms.TextInput( +class NewItem(forms.Form): + item= forms.CharField(label='',widget=forms.TextInput( attrs={'placeholder': 'Add new item'}), max_length=10) - +# Create your views here. def home(request): - # folder= List.objects.all().order_by('date') - folder= List.objects.filter(delete= False).order_by('-date') + show_items= List.objects.filter(delete= False).order_by('date') context= { - "new": new_list(), - 'folder': folder + 'new_item': NewItem, + 'show_items': show_items } - return render(request, "grocery_app/index.html", context) + + return render(request, 'grocery_app/index.html', context) def save(request): - if request.method == 'POST': - form= new_list(request.POST) + if request.method == "POST": + form= NewItem(request.POST) if form.is_valid(): - text= form.cleaned_data['text'] + text= form.cleaned_data['item'] user= request.user - - list= List() + # + list=List() list.new= text list.user= user list.save() return HttpResponseRedirect(reverse('home')) +def delete(request, id): + if request.method == 'GET': + List.objects.filter(id=id).delete() + # list= get_object_or_404(List, id=id) + # list.delete + return HttpResponseRedirect(reverse('home')) + + \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py index cddbc222..e9b966e4 100644 --- a/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py +++ b/Code/matthew/django/labs/03_grocery_list/grocery_list/grocery_proj/settings.py @@ -20,7 +20,7 @@ # 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-0fbz7@^6glp0s=x4#e2tf9%dzave8%gqpbrh0lei)3qsip53t%' +SECRET_KEY = 'django-insecure-&y%_hrq12*fw6=&&a4%lwl#-e*(sekapntn5_ig*m%2+q@wrj%' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True @@ -123,4 +123,3 @@ # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -DATE_INPUT_FORMATS = ('%d-%m-%Y','%Y-%m-%d') diff --git a/Code/matthew/django/lectures/05_/chirpy_app/__init__.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/__init__.py similarity index 100% rename from Code/matthew/django/lectures/05_/chirpy_app/__init__.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/__init__.py diff --git a/Code/matthew/django/lectures/05_/chirpy_app/admin.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/admin.py similarity index 53% rename from Code/matthew/django/lectures/05_/chirpy_app/admin.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/admin.py index 23976cb8..64a74eba 100644 --- a/Code/matthew/django/lectures/05_/chirpy_app/admin.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin -from . models import Cheep +from . models import List + # Register your models here. -admin.site.register(Cheep) +admin.site.register(List) \ No newline at end of file diff --git a/Code/matthew/django/lectures/05_/chirpy_app/apps.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/apps.py similarity index 60% rename from Code/matthew/django/lectures/05_/chirpy_app/apps.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/apps.py index b0149d00..87b0bfcb 100644 --- a/Code/matthew/django/lectures/05_/chirpy_app/apps.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/apps.py @@ -1,6 +1,6 @@ from django.apps import AppConfig -class ChirpyAppConfig(AppConfig): +class GroceryAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'chirpy_app' + name = 'grocery_app' diff --git a/Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/0001_initial.py similarity index 68% rename from Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/0001_initial.py index 9d40d805..b53f41f1 100644 --- a/Code/matthew/django/lectures/05_/chirpy_app/migrations/0001_initial.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.0.3 on 2022-03-30 02:33 +# Generated by Django 4.0.3 on 2022-04-04 19:37 from django.conf import settings from django.db import migrations, models @@ -15,12 +15,12 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Cheep', + name='List', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('chirp', models.CharField(max_length=125)), - ('date_published', models.DateTimeField(auto_now=True)), - ('deleted', models.BooleanField(default=False)), + ('new', models.CharField(max_length=50)), + ('date', models.DateField(auto_now=True)), + ('delete', models.BooleanField(default=False)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), diff --git a/Code/matthew/django/lectures/05_/chirpy_app/migrations/__init__.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/__init__.py similarity index 100% rename from Code/matthew/django/lectures/05_/chirpy_app/migrations/__init__.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/__init__.py diff --git a/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/models.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/models.py new file mode 100644 index 00000000..c2f91c47 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/models.py @@ -0,0 +1,12 @@ +from django.db import models +from django.contrib.auth.models import User +# Create your models here. + +class List(models.Model): + new= models.CharField(max_length=50) + date= models.DateField(auto_now=True) + user= models.ForeignKey(User, on_delete=models.CASCADE) + delete= models.BooleanField(default=False) + + def __str__(self): + return f'{self.new}: {self.date}' \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/templates/grocery_app/index.html b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/templates/grocery_app/index.html new file mode 100644 index 00000000..8b732aff --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/templates/grocery_app/index.html @@ -0,0 +1,31 @@ + + + + + + + Grocery List + + +

Home

+ +
+ {% csrf_token %} + {{new_item}} + +
+ + {% for item in show_items %} + +
    + +
    + + +
    +
+ + {% endfor %} + + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/05_/chirpy_app/tests.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/tests.py similarity index 100% rename from Code/matthew/django/lectures/05_/chirpy_app/tests.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_app/tests.py diff --git a/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/urls.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/urls.py new file mode 100644 index 00000000..4f1e87ef --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/urls.py @@ -0,0 +1,25 @@ +"""grocery_proj 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.urls import path +from . import views + +urlpatterns = [ + # home/ + path('home/', views.home, name='home'), + path('save/', views.save, name='save'), + path('delete//', views.delete, name='delete'), +] \ No newline at end of file diff --git a/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/views.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/views.py new file mode 100644 index 00000000..0e7268d0 --- /dev/null +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_app/views.py @@ -0,0 +1,41 @@ +from django.shortcuts import get_object_or_404, render +from django import forms +from django.http import HttpResponseRedirect +from django.urls import reverse +from . models import List + +class NewItem(forms.Form): + item= forms.CharField(label='',widget=forms.TextInput( + attrs={'placeholder': 'Add new item'}), max_length=10) + +# Create your views here. +def home(request): + show_items= List.objects.filter(delete= False).order_by('date') + context= { + 'new_item': NewItem, + 'show_items': show_items + } + + return render(request, 'grocery_app/index.html', context) + +def save(request): + if request.method == "POST": + form= NewItem(request.POST) + if form.is_valid(): + text= form.cleaned_data['item'] + user= request.user + # + list=List() + list.new= text + list.user= user + list.save() + return HttpResponseRedirect(reverse('home')) + +def delete(request, id): + if request.method == 'GET': + List.objects.filter(id=id).delete() + # list= get_object_or_404(List, id=id) + # list.delete + return HttpResponseRedirect(reverse('home')) + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/__init__.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/__init__.py similarity index 100% rename from Code/matthew/django/lectures/05_/chirpy_proj/__init__.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/__init__.py diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/asgi.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/asgi.py similarity index 72% rename from Code/matthew/django/lectures/05_/chirpy_proj/asgi.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/asgi.py index a8c08843..9012ee82 100644 --- a/Code/matthew/django/lectures/05_/chirpy_proj/asgi.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/asgi.py @@ -1,5 +1,5 @@ """ -ASGI config for chirpy_proj project. +ASGI config for grocery_proj project. It exposes the ASGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.asgi import get_asgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chirpy_proj.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'grocery_proj.settings') application = get_asgi_application() diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/settings.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/settings.py similarity index 92% rename from Code/matthew/django/lectures/05_/chirpy_proj/settings.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/settings.py index 294fec4c..e9b966e4 100644 --- a/Code/matthew/django/lectures/05_/chirpy_proj/settings.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/settings.py @@ -1,5 +1,5 @@ """ -Django settings for chirpy_proj project. +Django settings for grocery_proj project. Generated by 'django-admin startproject' using Django 4.0.3. @@ -20,7 +20,7 @@ # 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-(1^puj&==bj1hrk)lxjlj#76p6)&ny!#jt#v^iu_2ws4fi8n0i' +SECRET_KEY = 'django-insecure-&y%_hrq12*fw6=&&a4%lwl#-e*(sekapntn5_ig*m%2+q@wrj%' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True @@ -37,8 +37,8 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - # - 'chirpy_app' + # + 'grocery_app' ] MIDDLEWARE = [ @@ -51,7 +51,7 @@ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'chirpy_proj.urls' +ROOT_URLCONF = 'grocery_proj.urls' TEMPLATES = [ { @@ -69,7 +69,7 @@ }, ] -WSGI_APPLICATION = 'chirpy_proj.wsgi.application' +WSGI_APPLICATION = 'grocery_proj.wsgi.application' # Database diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/urls.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/urls.py similarity index 90% rename from Code/matthew/django/lectures/05_/chirpy_proj/urls.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/urls.py index 38a7d057..b2ba1e8c 100644 --- a/Code/matthew/django/lectures/05_/chirpy_proj/urls.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/urls.py @@ -1,4 +1,4 @@ -"""chirpy_proj URL Configuration +"""grocery_proj URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.0/topics/http/urls/ @@ -18,5 +18,5 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('chirp/', include('chirpy_app.urls')) + path('', include('grocery_app.urls')) ] diff --git a/Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/wsgi.py similarity index 72% rename from Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py rename to Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/wsgi.py index a7d60919..567bce68 100644 --- a/Code/matthew/django/lectures/05_/chirpy_proj/wsgi.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/wsgi.py @@ -1,5 +1,5 @@ """ -WSGI config for chirpy_proj project. +WSGI config for grocery_proj project. It exposes the WSGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chirpy_proj.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'grocery_proj.settings') application = get_wsgi_application() diff --git a/Code/matthew/django/lectures/05_/manage.py b/Code/matthew/django/labs/03_grocery_list/redo/manage.py similarity index 88% rename from Code/matthew/django/lectures/05_/manage.py rename to Code/matthew/django/labs/03_grocery_list/redo/manage.py index 327acf62..f97e4e6d 100755 --- a/Code/matthew/django/lectures/05_/manage.py +++ b/Code/matthew/django/labs/03_grocery_list/redo/manage.py @@ -6,7 +6,7 @@ def main(): """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chirpy_proj.settings') + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'grocery_proj.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: diff --git a/Code/matthew/django/lectures/05_/chirpy_app/models.py b/Code/matthew/django/lectures/05_/chirpy_app/models.py deleted file mode 100644 index 860c4d0a..00000000 --- a/Code/matthew/django/lectures/05_/chirpy_app/models.py +++ /dev/null @@ -1,19 +0,0 @@ -from django.contrib.auth.models import User -from django.db import models - - -# For importing ~User objects~ (username, password, email, first_name, last_name) - - -# Create your models here. - -class Cheep(models.Model): - chirp = models.CharField(max_length=125) - # auto_now gives timestamp based off settings time_zone - date_published = models.DateTimeField(auto_now=True) - # on_delete=CASCADE - deletes all user data and associated information - user = models.ForeignKey(User, on_delete=models.CASCADE) - deleted = models.BooleanField(default=False) - - def __str__(self): - return f'{self.user}: {self.date_published} -- {self.chirp}' diff --git a/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html b/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html deleted file mode 100644 index 4b5ce492..00000000 --- a/Code/matthew/django/lectures/05_/chirpy_app/templates/chirpy_app/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - Chirp - - -

Welcome to Class Kiwi Chirpy

-
- {% csrf_token %} {{form}} - - -
- - - diff --git a/Code/matthew/django/lectures/05_/chirpy_app/views.py b/Code/matthew/django/lectures/05_/chirpy_app/views.py deleted file mode 100644 index 96457ecf..00000000 --- a/Code/matthew/django/lectures/05_/chirpy_app/views.py +++ /dev/null @@ -1,35 +0,0 @@ - -from django.shortcuts import render -from django import forms -from django.http import HttpResponseRedirect -from django.urls import reverse -from .models import Cheep -# Create your views here. - - -class NewCheepForm(forms.Form): - text1 = forms.CharField(label='Cheep your thoughts here', widget=forms.TextInput( - attrs={'placeholder': 'Cheep away'}), max_length=120) - - -def index(request): - - return render(request, 'chirpy_app/index.html', { - 'form': NewCheepForm(), - }) - - -def save_cheep(request): - if request.method == 'POST': - form = NewCheepForm(request.POST) - if form.is_valid(): - text = form.cleaned_data['text1'] - user = request.user - # Linking Cheep() in models.py and automatically updating chirp and user - - cheep = Cheep() # Ex: cheep.date_published - cheep.chirp = text - cheep.user = user - cheep.save() - - return HttpResponseRedirect(reverse('index')) diff --git a/Code/matthew/django/lectures/06_template_inheritance/manage.py b/Code/matthew/django/lectures/06_template_inheritance/manage.py new file mode 100755 index 00000000..d416ec1b --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/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', 'routing_proj.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/matthew/django/lectures/06_template_inheritance/routing_app/__init__.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/admin.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/apps.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/apps.py new file mode 100644 index 00000000..9fabc5e3 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class RoutingAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'routing_app' diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/migrations/__init__.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/models.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/animation.html b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/animation.html new file mode 100644 index 00000000..a478a228 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/animation.html @@ -0,0 +1,10 @@ + +{% extends 'routing_app/base.html' %} +{% block title %} + Animation +{% endblock title %} + +{% block content %} +

This is my Animation page

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorum impedit

+{% endblock content %} \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/base.html b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/base.html new file mode 100644 index 00000000..a22956e0 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/base.html @@ -0,0 +1,27 @@ + +{% load static %} + + + + + + + + + + + {% block title %} + {% endblock title %} + + + + {% block content %} + + {% endblock content %} + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/bio.html b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/bio.html new file mode 100644 index 00000000..ff638abf --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/bio.html @@ -0,0 +1,10 @@ + +{% extends 'routing_app/base.html' %} +{% block title %} + Bio +{% endblock title %} + +{% block content %} +

This is my Bio page

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorum impedit

+{% endblock content %} \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/blog.html b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/blog.html new file mode 100644 index 00000000..cc6f79ce --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/blog.html @@ -0,0 +1,10 @@ + +{% extends 'routing_app/base.html' %} +{% block title %} + Blog +{% endblock title %} + +{% block content %} +

This is my Blog page

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorum impedit

+{% endblock content %} \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/company.html b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/company.html new file mode 100644 index 00000000..874e510d --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/templates/routing_app/company.html @@ -0,0 +1,10 @@ + +{% extends 'routing_app/base.html' %} +{% block title %} + Company +{% endblock title %} + +{% block content %} +

This is my Company page

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorum impedit

+{% endblock content %} \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/tests.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/urls.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/urls.py new file mode 100644 index 00000000..47cd1778 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/urls.py @@ -0,0 +1,21 @@ +"""routing_App 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') + +""" + +from django.urls import path +from . import views + +urlpatterns = [ + path('bio/', views.bio, name='bio'), + path('animation/', views.animation, name='animation'), + path('blog/', views.blog, name='blog'), + path('', views.base, name='base'), + path('company/', views.company, name='company') +] \ No newline at end of file diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_app/views.py b/Code/matthew/django/lectures/06_template_inheritance/routing_app/views.py new file mode 100644 index 00000000..b2ae621a --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_app/views.py @@ -0,0 +1,19 @@ +from django.shortcuts import render + +# Create your views here. + +def bio(request): + + return render(request, 'routing_app/bio.html') + +def animation(request): + return render(request, 'routing_app/animation.html') + +def base(request): + return render(request, 'routing_app/base.html') + +def blog(request): + return render(request, 'routing_app/blog.html') + +def company(request): + return render(request, 'routing_app/company.html') diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_proj/__init__.py b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_proj/asgi.py b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/asgi.py new file mode 100644 index 00000000..28181650 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for routing_proj 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', 'routing_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_proj/settings.py b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/settings.py new file mode 100644 index 00000000..48278bce --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/settings.py @@ -0,0 +1,127 @@ +""" +Django settings for routing_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-=u+f$a_(o9luw8n9eak&ra7_z*(h&r&p)h!_&rb7cd)@jk_%mc' + +# 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', + # + 'routing_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 = 'routing_proj.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 = 'routing_proj.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/Los_Angeles' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.0/howto/static-files/ + +STATIC_URL = '/static/' +# STATIC_URL = '/static/' +STATICFILES_DIRS= [str(BASE_DIR.joinpath('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/matthew/django/lectures/06_template_inheritance/routing_proj/urls.py b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/urls.py new file mode 100644 index 00000000..68e2994f --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/urls.py @@ -0,0 +1,22 @@ +"""routing_proj 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('routing/', include('routing_app.urls')) +] diff --git a/Code/matthew/django/lectures/06_template_inheritance/routing_proj/wsgi.py b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/wsgi.py new file mode 100644 index 00000000..ca63dd49 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/routing_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for routing_proj 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', 'routing_proj.settings') + +application = get_wsgi_application() diff --git a/Code/matthew/django/lectures/06_template_inheritance/static/css/styles.css b/Code/matthew/django/lectures/06_template_inheritance/static/css/styles.css new file mode 100644 index 00000000..eefc52f1 --- /dev/null +++ b/Code/matthew/django/lectures/06_template_inheritance/static/css/styles.css @@ -0,0 +1,13 @@ +body { + background-color: aqua; + +} + +.alert{ + color: orange; +} + +nav { + display: flex; + justify-content: flex-end; +} \ No newline at end of file diff --git a/Code/matthew/django/lectures/07_/manage.py b/Code/matthew/django/lectures/07_/manage.py new file mode 100755 index 00000000..4b0773d9 --- /dev/null +++ b/Code/matthew/django/lectures/07_/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', 'sessions_proj.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/matthew/django/lectures/07_/sessions_app/__init__.py b/Code/matthew/django/lectures/07_/sessions_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/07_/sessions_app/admin.py b/Code/matthew/django/lectures/07_/sessions_app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Code/matthew/django/lectures/07_/sessions_app/apps.py b/Code/matthew/django/lectures/07_/sessions_app/apps.py new file mode 100644 index 00000000..49afd7fb --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SessionsAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'sessions_app' diff --git a/Code/matthew/django/lectures/07_/sessions_app/migrations/__init__.py b/Code/matthew/django/lectures/07_/sessions_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/07_/sessions_app/models.py b/Code/matthew/django/lectures/07_/sessions_app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/add.html b/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/add.html new file mode 100644 index 00000000..00ad8863 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/add.html @@ -0,0 +1,23 @@ + + + + + + + Add Task + + +

Add Task

+ +
+ {% csrf_token %} + {{form}} + + +
+ + + + View Task + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/index.html b/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/index.html new file mode 100644 index 00000000..9c282693 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/templates/sessions_app/index.html @@ -0,0 +1,21 @@ + + + + + + + Sessions + + +

Home page

+ {% for task in tasks %} +
  • + {{task}} +
  • + {%empty%} +
  • No Tasks
  • + {% endfor %} +
    + Add Task + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/07_/sessions_app/tests.py b/Code/matthew/django/lectures/07_/sessions_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/05_/chirpy_app/urls.py b/Code/matthew/django/lectures/07_/sessions_app/urls.py similarity index 70% rename from Code/matthew/django/lectures/05_/chirpy_app/urls.py rename to Code/matthew/django/lectures/07_/sessions_app/urls.py index 1e1714e2..8043ad49 100644 --- a/Code/matthew/django/lectures/05_/chirpy_app/urls.py +++ b/Code/matthew/django/lectures/07_/sessions_app/urls.py @@ -1,7 +1,8 @@ +"""sessions_app URL Configuration - -"""chirpy_app 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') @@ -16,8 +17,8 @@ from django.urls import path from . import views - +app_name= 'tasks' urlpatterns = [ path('', views.index, name='index'), - path('save/', views.save_cheep, name='save') + path('add/', views.add, name='add') ] diff --git a/Code/matthew/django/lectures/07_/sessions_app/views.py b/Code/matthew/django/lectures/07_/sessions_app/views.py new file mode 100644 index 00000000..ec4b44de --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_app/views.py @@ -0,0 +1,38 @@ +from django.urls import reverse +from django.http import HttpResponseRedirect +from django.shortcuts import render +from django import forms + +class NewTaskForm(forms.Form): + task= forms.CharField(label='new task') + +tasks= [] + +# Create your views here. + +def index(request): + # .session tracks user by cookies + # session is a request object + # method is a request object + if 'tasks' not in request.session: + request.session['tasks'] = [] + return render(request, 'sessions_app/index.html', { + 'tasks': tasks + }) + +def add(request): + if request.method == 'POST': + form = NewTaskForm(request.POST) + if form.is_valid(): + task= form.cleaned_data['task'] + tasks.append(task) + # request.session['tasks'] +=[task] + + return HttpResponseRedirect(reverse('tasks:index')) + else: + return render(request, 'sessions_app/add.html', { + 'form': form + }) + return render(request, 'sessions_app/add.html', { + 'form': NewTaskForm() + }) diff --git a/Code/matthew/django/lectures/07_/sessions_proj/__init__.py b/Code/matthew/django/lectures/07_/sessions_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/07_/sessions_proj/asgi.py b/Code/matthew/django/lectures/07_/sessions_proj/asgi.py new file mode 100644 index 00000000..4495b5f2 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for sessions_proj 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', 'sessions_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/07_/sessions_proj/settings.py b/Code/matthew/django/lectures/07_/sessions_proj/settings.py new file mode 100644 index 00000000..902854fb --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_proj/settings.py @@ -0,0 +1,125 @@ +""" +Django settings for sessions_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-3!yn6t7husk-f*@4-al^k!i6)5za%_s&*q)7n-#tmb8o=pf-my' + +# 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', + # + 'sessions_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 = 'sessions_proj.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 = 'sessions_proj.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/Los_Angeles' + +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/matthew/django/lectures/07_/sessions_proj/urls.py b/Code/matthew/django/lectures/07_/sessions_proj/urls.py new file mode 100644 index 00000000..f2a77727 --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_proj/urls.py @@ -0,0 +1,22 @@ +"""sessions_proj 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('sessions/', include('sessions_app.urls')) +] diff --git a/Code/matthew/django/lectures/07_/sessions_proj/wsgi.py b/Code/matthew/django/lectures/07_/sessions_proj/wsgi.py new file mode 100644 index 00000000..77ec292c --- /dev/null +++ b/Code/matthew/django/lectures/07_/sessions_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for sessions_proj 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', 'sessions_proj.settings') + +application = get_wsgi_application() From 997cc42ab86c3dbee7db8af9e218f5ec46da1a98 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Mon, 4 Apr 2022 21:30:46 -0700 Subject: [PATCH 13/20] ading model forms notes --- .../django/lectures/08_model_forms/manage.py | 22 +++ .../08_model_forms/static/css/styles.css | 30 +++++ .../08_model_forms/todo_app/__init__.py | 0 .../lectures/08_model_forms/todo_app/admin.py | 7 + .../lectures/08_model_forms/todo_app/apps.py | 6 + .../lectures/08_model_forms/todo_app/forms.py | 10 ++ .../todo_app/migrations/0001_initial.py | 23 ++++ .../todo_app/migrations/__init__.py | 0 .../08_model_forms/todo_app/models.py | 12 ++ .../todo_app/templates/todo_app/delete.html | 12 ++ .../todo_app/templates/todo_app/index.html | 58 ++++++++ .../todo_app/templates/todo_app/update.html | 11 ++ .../lectures/08_model_forms/todo_app/tests.py | 3 + .../lectures/08_model_forms/todo_app/urls.py | 24 ++++ .../lectures/08_model_forms/todo_app/views.py | 55 ++++++++ .../08_model_forms/todo_proj/__init__.py | 0 .../lectures/08_model_forms/todo_proj/asgi.py | 16 +++ .../08_model_forms/todo_proj/settings.py | 126 ++++++++++++++++++ .../lectures/08_model_forms/todo_proj/urls.py | 22 +++ .../lectures/08_model_forms/todo_proj/wsgi.py | 16 +++ 20 files changed, 453 insertions(+) create mode 100755 Code/matthew/django/lectures/08_model_forms/manage.py create mode 100644 Code/matthew/django/lectures/08_model_forms/static/css/styles.css create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/__init__.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/admin.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/apps.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/forms.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/migrations/0001_initial.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/migrations/__init__.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/models.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/delete.html create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/index.html create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/update.html create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/tests.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/urls.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_app/views.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_proj/__init__.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_proj/asgi.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_proj/settings.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_proj/urls.py create mode 100644 Code/matthew/django/lectures/08_model_forms/todo_proj/wsgi.py diff --git a/Code/matthew/django/lectures/08_model_forms/manage.py b/Code/matthew/django/lectures/08_model_forms/manage.py new file mode 100755 index 00000000..6be564d2 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/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_proj.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/matthew/django/lectures/08_model_forms/static/css/styles.css b/Code/matthew/django/lectures/08_model_forms/static/css/styles.css new file mode 100644 index 00000000..62910870 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/static/css/styles.css @@ -0,0 +1,30 @@ +body { + background-color: aqua; +} +.all_tasks { + width: 400px; + +} +.user_controls { + /* display: flex; + flex-direction: column; */ + text-align: end; +} +.tasks { + display: flex; + flex-direction: column; + + border: 1px solid black; + margin: 5px; +} +.item { + text-decoration: underline; +} +.done { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 5px; + +} + diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/__init__.py b/Code/matthew/django/lectures/08_model_forms/todo_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/admin.py b/Code/matthew/django/lectures/08_model_forms/todo_app/admin.py new file mode 100644 index 00000000..ff7ce428 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +# * imports all from models +from . models import * + +# Register your models here. + +admin.site.register(Task) diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/apps.py b/Code/matthew/django/lectures/08_model_forms/todo_app/apps.py new file mode 100644 index 00000000..d8f1498d --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/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/matthew/django/lectures/08_model_forms/todo_app/forms.py b/Code/matthew/django/lectures/08_model_forms/todo_app/forms.py new file mode 100644 index 00000000..28013a93 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/forms.py @@ -0,0 +1,10 @@ +from django import forms +from django.forms import ModelForm +from . models import * + +# naming convention: Task() is model so this is TaskForm +class TaskForm(forms.ModelForm): + class Meta: + model= Task + # + fields= '__all__' \ No newline at end of file diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/migrations/0001_initial.py b/Code/matthew/django/lectures/08_model_forms/todo_app/migrations/0001_initial.py new file mode 100644 index 00000000..64f646eb --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.3 on 2022-04-05 02:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Task', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('complete', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/migrations/__init__.py b/Code/matthew/django/lectures/08_model_forms/todo_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/models.py b/Code/matthew/django/lectures/08_model_forms/todo_app/models.py new file mode 100644 index 00000000..8ef87a10 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/models.py @@ -0,0 +1,12 @@ +from django.db import models + +# Create your models here. + +class Task(models.Model): + title= models.CharField(max_length=200) + complete= models.BooleanField(default=False) + created= models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.title + diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/delete.html b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/delete.html new file mode 100644 index 00000000..f4d7f7df --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/delete.html @@ -0,0 +1,12 @@ +{% extends 'todo_app/index.html' %} + + {% block content %} + +

    Do you want to delete "{{item}}"

    +
    + {% csrf_token %} + +
    +
    +Cancel + {% endblock content %} \ No newline at end of file diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/index.html b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/index.html new file mode 100644 index 00000000..d90b5fe7 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/index.html @@ -0,0 +1,58 @@ + +{% load static %} + + + + + + + Home + + + +
    + {% block content %} + +

    Todo List

    + +
    +
    + {% csrf_token %} + + {{form.title}} + +
    +
    +
    +
    + + +
    +

    ToDo

    + {% for task in tasks %} +
    + Edit + Delete +
    + +
    + {{task}} +
    +
    + {% endfor %} +
    + + +
    +

    Completed

    + {% for d_task in done_tasks %} + {{d_task}} + {% endfor %} +
    +
    + + {% endblock content %} + + \ No newline at end of file diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/update.html b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/update.html new file mode 100644 index 00000000..593d97ab --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/templates/todo_app/update.html @@ -0,0 +1,11 @@ +{% extends "todo_app/index.html" %} + + {% block content %} + +
    + {% csrf_token %} + {{form}} + +
    + + {% endblock content %} diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/tests.py b/Code/matthew/django/lectures/08_model_forms/todo_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/urls.py b/Code/matthew/django/lectures/08_model_forms/todo_app/urls.py new file mode 100644 index 00000000..354bfe57 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/urls.py @@ -0,0 +1,24 @@ +"""todo_app URL Configuration + + +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.urls import path +from . import views + +urlpatterns = [ + # + path('', views.index, name='index'), + path('update//', views.updateTask, name='update'), + path('delete//', views.deleteTask, name='delete'), + + +] \ No newline at end of file diff --git a/Code/matthew/django/lectures/08_model_forms/todo_app/views.py b/Code/matthew/django/lectures/08_model_forms/todo_app/views.py new file mode 100644 index 00000000..766914cc --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_app/views.py @@ -0,0 +1,55 @@ +from django.forms import BooleanField +from django.shortcuts import redirect, render +# from . models import Task +from . models import * +from todo_app.forms import TaskForm + +# Create your views here. + +def index(request): + # tasks= Task.objects.all() + tasks= Task.objects.filter(complete=False) + done_tasks= Task.objects.filter(complete=True) + form= TaskForm() + + if request.method == 'POST': + form= TaskForm(request.POST) + if form.is_valid(): + # .save() saves information to database + form.save() + return redirect('/') + + context= { + 'tasks': tasks, + 'done_tasks': done_tasks, + 'form': form + } + return render(request, 'todo_app/index.html', context) + +def updateTask(request, pk): + # targets specific id + task= Task.objects.get(id=pk) + # edit specifc id + form= TaskForm(instance=task) + context= { + 'form': form + } + if request.method == "POST": + # specifically targeting the id=pk for the indavidual task + form= TaskForm(request.POST, instance=task) + if form.is_valid(): + form.save() + return redirect('/') + + return render(request, 'todo_app/update.html', context) + +def deleteTask(request, pk): + item= Task.objects.get(id=pk) + if request.method == "POST": + item.delete() + return redirect('/') + context= { + 'item': item, + } + + return render(request, 'todo_app/delete.html', context) \ No newline at end of file diff --git a/Code/matthew/django/lectures/08_model_forms/todo_proj/__init__.py b/Code/matthew/django/lectures/08_model_forms/todo_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/lectures/08_model_forms/todo_proj/asgi.py b/Code/matthew/django/lectures/08_model_forms/todo_proj/asgi.py new file mode 100644 index 00000000..5a0fd4de --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for todo_proj 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_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/lectures/08_model_forms/todo_proj/settings.py b/Code/matthew/django/lectures/08_model_forms/todo_proj/settings.py new file mode 100644 index 00000000..05ec1c02 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_proj/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for todo_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-*6yqfu9-4yc0dzh^tnr0^53%@)+fh=r(lx*$+tcr&&=539w*98' + +# 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_proj.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_proj.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/Los_Angeles' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.0/howto/static-files/ + +STATIC_URL = 'static/' +STATICFILES_DIRS= [str(BASE_DIR.joinpath('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/matthew/django/lectures/08_model_forms/todo_proj/urls.py b/Code/matthew/django/lectures/08_model_forms/todo_proj/urls.py new file mode 100644 index 00000000..102e3945 --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_proj/urls.py @@ -0,0 +1,22 @@ +"""todo_proj 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/matthew/django/lectures/08_model_forms/todo_proj/wsgi.py b/Code/matthew/django/lectures/08_model_forms/todo_proj/wsgi.py new file mode 100644 index 00000000..5f96a37b --- /dev/null +++ b/Code/matthew/django/lectures/08_model_forms/todo_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for todo_proj 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_proj.settings') + +application = get_wsgi_application() From 83bbf4d11c3e1473f8d94a053c7606fb45b24998 Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Fri, 8 Apr 2022 20:33:38 -0700 Subject: [PATCH 14/20] adding todo lab --- Code/matthew/django/labs/04_todo/manage.py | 22 +++ .../django/labs/04_todo/static/css/styles.css | 5 + .../django/labs/04_todo/todo_app/__init__.py | 0 .../django/labs/04_todo/todo_app/admin.py | 6 + .../django/labs/04_todo/todo_app/apps.py | 6 + .../django/labs/04_todo/todo_app/forms.py | 13 ++ .../todo_app/migrations/0001_initial.py | 23 ++++ .../todo_app/migrations/0002_newtask_value.py | 18 +++ .../migrations/0003_alter_newtask_value.py | 18 +++ .../todo_app/migrations/0004_priority.py | 20 +++ .../0005_alter_priority_important.py | 18 +++ ...0006_remove_newtask_value_priority_date.py | 22 +++ .../todo_app/migrations/0007_taggeditem.py | 24 ++++ ..._priority_important_priority_importance.py | 22 +++ ...content_type_newtask_object_id_and_more.py | 28 ++++ ..._type_remove_newtask_object_id_and_more.py | 26 ++++ .../migrations/0011_newtask_content_type.py | 20 +++ .../0012_remove_newtask_content_type.py | 17 +++ .../migrations/0013_newtask_content_type.py | 20 +++ .../04_todo/todo_app/migrations/__init__.py | 0 .../django/labs/04_todo/todo_app/models.py | 46 +++++++ .../todo_app/templates/todo_app/edit.html | 22 +++ .../todo_app/templates/todo_app/index.html | 67 ++++++++++ .../django/labs/04_todo/todo_app/tests.py | 3 + .../django/labs/04_todo/todo_app/urls.py | 26 ++++ .../django/labs/04_todo/todo_app/views.py | 61 +++++++++ .../django/labs/04_todo/todo_proj/__init__.py | 0 .../django/labs/04_todo/todo_proj/asgi.py | 16 +++ .../django/labs/04_todo/todo_proj/settings.py | 126 ++++++++++++++++++ .../django/labs/04_todo/todo_proj/urls.py | 22 +++ .../django/labs/04_todo/todo_proj/wsgi.py | 16 +++ 31 files changed, 733 insertions(+) create mode 100755 Code/matthew/django/labs/04_todo/manage.py create mode 100644 Code/matthew/django/labs/04_todo/static/css/styles.css create mode 100644 Code/matthew/django/labs/04_todo/todo_app/__init__.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/admin.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/apps.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/forms.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/__init__.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/models.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html create mode 100644 Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html create mode 100644 Code/matthew/django/labs/04_todo/todo_app/tests.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/urls.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/views.py create mode 100644 Code/matthew/django/labs/04_todo/todo_proj/__init__.py create mode 100644 Code/matthew/django/labs/04_todo/todo_proj/asgi.py create mode 100644 Code/matthew/django/labs/04_todo/todo_proj/settings.py create mode 100644 Code/matthew/django/labs/04_todo/todo_proj/urls.py create mode 100644 Code/matthew/django/labs/04_todo/todo_proj/wsgi.py diff --git a/Code/matthew/django/labs/04_todo/manage.py b/Code/matthew/django/labs/04_todo/manage.py new file mode 100755 index 00000000..6be564d2 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/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_proj.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/matthew/django/labs/04_todo/static/css/styles.css b/Code/matthew/django/labs/04_todo/static/css/styles.css new file mode 100644 index 00000000..d7eec1f4 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/static/css/styles.css @@ -0,0 +1,5 @@ + +.high { + background-color: #FFFF00; + display: inline-flex; +} diff --git a/Code/matthew/django/labs/04_todo/todo_app/__init__.py b/Code/matthew/django/labs/04_todo/todo_app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/04_todo/todo_app/admin.py b/Code/matthew/django/labs/04_todo/todo_app/admin.py new file mode 100644 index 00000000..93190304 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import * + +# Register your models here. +admin.site.register(NewTask) +admin.site.register(Priority) \ No newline at end of file diff --git a/Code/matthew/django/labs/04_todo/todo_app/apps.py b/Code/matthew/django/labs/04_todo/todo_app/apps.py new file mode 100644 index 00000000..d8f1498d --- /dev/null +++ b/Code/matthew/django/labs/04_todo/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/matthew/django/labs/04_todo/todo_app/forms.py b/Code/matthew/django/labs/04_todo/todo_app/forms.py new file mode 100644 index 00000000..a74b542d --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/forms.py @@ -0,0 +1,13 @@ + +from django import forms +from django.forms import ModelForm +from .models import NewTask, Priority + +class NewTaskForm(forms.ModelForm): + class Meta: + model= NewTask + fields= "__all__" +class NewPriority(forms.ModelForm): + class Meta: + model= Priority + fields= "__all__" diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py new file mode 100644 index 00000000..0f00219b --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.3 on 2022-04-08 01:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='NewTask', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('task', models.CharField(max_length=25)), + ('complete', models.BooleanField(default=False)), + ('date', models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py new file mode 100644 index 00000000..b0f7232d --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.3 on 2022-04-08 02:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='newtask', + name='value', + field=models.IntegerField(default=0), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py new file mode 100644 index 00000000..d0e50827 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.3 on 2022-04-08 03:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0002_newtask_value'), + ] + + operations = [ + migrations.AlterField( + model_name='newtask', + name='value', + field=models.IntegerField(blank=True, default=0), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py new file mode 100644 index 00000000..5f105b24 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.3 on 2022-04-08 03:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0003_alter_newtask_value'), + ] + + operations = [ + migrations.CreateModel( + name='Priority', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('important', models.CharField(max_length=10, verbose_name='High Medium or Low')), + ], + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py new file mode 100644 index 00000000..f1b09554 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.3 on 2022-04-08 03:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0004_priority'), + ] + + operations = [ + migrations.AlterField( + model_name='priority', + name='important', + field=models.CharField(max_length=10), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py new file mode 100644 index 00000000..1002ccff --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.3 on 2022-04-09 01:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0005_alter_priority_important'), + ] + + operations = [ + migrations.RemoveField( + model_name='newtask', + name='value', + ), + migrations.AddField( + model_name='priority', + name='date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py new file mode 100644 index 00000000..4245ba7d --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.3 on 2022-04-09 02:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('todo_app', '0006_remove_newtask_value_priority_date'), + ] + + operations = [ + migrations.CreateModel( + name='TaggedItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('tag', models.SlugField()), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ], + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py new file mode 100644 index 00000000..20a4ab40 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.3 on 2022-04-09 02:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0007_taggeditem'), + ] + + operations = [ + migrations.RemoveField( + model_name='priority', + name='important', + ), + migrations.AddField( + model_name='priority', + name='importance', + field=models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High')], default='Low', max_length=6), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py new file mode 100644 index 00000000..85b728bf --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:01 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('todo_app', '0008_remove_priority_important_priority_importance'), + ] + + operations = [ + migrations.AddField( + model_name='newtask', + name='content_type', + field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), + migrations.AddField( + model_name='newtask', + name='object_id', + field=models.PositiveIntegerField(default=False), + ), + migrations.DeleteModel( + name='TaggedItem', + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py new file mode 100644 index 00000000..3d92a69b --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0009_newtask_content_type_newtask_object_id_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='newtask', + name='content_type', + ), + migrations.RemoveField( + model_name='newtask', + name='object_id', + ), + migrations.AddField( + model_name='newtask', + name='value', + field=models.IntegerField(blank=True, default=0), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py new file mode 100644 index 00000000..362d5753 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('todo_app', '0010_remove_newtask_content_type_remove_newtask_object_id_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='newtask', + name='content_type', + field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py new file mode 100644 index 00000000..f48b888b --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0011_newtask_content_type'), + ] + + operations = [ + migrations.RemoveField( + model_name='newtask', + name='content_type', + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py new file mode 100644 index 00000000..ea0ea6e4 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:28 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('todo_app', '0012_remove_newtask_content_type'), + ] + + operations = [ + migrations.AddField( + model_name='newtask', + name='content_type', + field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/__init__.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/04_todo/todo_app/models.py b/Code/matthew/django/labs/04_todo/todo_app/models.py new file mode 100644 index 00000000..2aba1061 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/models.py @@ -0,0 +1,46 @@ +from django.db import models +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +LVL= ( + ('low','Low'), + ('medium','Medium'), + ('high','High'), +) +# Create your models here. +class NewTask(models.Model): + task= models.CharField(max_length=25) + complete= models.BooleanField(default=False) + date= models.DateTimeField(auto_now=True) + value= models.IntegerField(default=0, blank=True) +# trying to join priority and Newtask + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, default=0) + # object_id = models.PositiveIntegerField(default=False) + # content_object = GenericForeignKey('content_type', 'object_id') + + def __str__(self): + return f'{self.task}' + +class Priority(models.Model): + importance= models.CharField(max_length=6,choices=LVL, default='Low') + date= models.DateTimeField(auto_now=True) + # object_id = models.PositiveIntegerField() + def __str__(self): + return f'{self.importance}' + + + + + + + + +######################################################################################################## + +# class TaggedItem(models.Model): +# tag = models.SlugField() +# content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) +# object_id = models.PositiveIntegerField() +# content_object = GenericForeignKey('content_type', 'object_id') + +# def __str__(self): +# return self.tag diff --git a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html new file mode 100644 index 00000000..2b200372 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html @@ -0,0 +1,22 @@ + +{% extends 'todo_app/index.html' %} +{% block title %} +Edit +{% endblock title %} + +{% block content %} + +

    Edit

    +

    ToDo list sorts by Value please set Value to -1 when complete to move to the bottom of the list. + Like wise if the task is important please change value to a higher value. Any value over 5 + will be highlighted +

    + +
    + {% csrf_token %} + {{form}} + {% comment %} {{imp_form}} {% endcomment %} + +
    + +{% endblock content %} diff --git a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html new file mode 100644 index 00000000..d00e06b7 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html @@ -0,0 +1,67 @@ + +{% load static %} + + + + + + + {% block title %} + Home + {% endblock title %} + + +{% block content %} + + +
    + {% csrf_token %} + +

    ToDo

    + {{form.task}} + +
    +
    + {% for task in tasks %} + + edit + delete +
      + {{task}} +
    + + + +{% endblock content %} + + {% comment "" %} +
    + edit + delete +
    +
      + {{task}}:IMPORTANT +
    +
    + {% elif task.complete == False and task.value <= 4 %} + edit + delete +
    +
      + {{task}} +
    +
    + {% else %} + edit + delete +
    +
      + {{task}} +
    + {% endif %} + + {% if task.complete == False and task.value >= 5 %} + {% endcomment %} + \ No newline at end of file diff --git a/Code/matthew/django/labs/04_todo/todo_app/tests.py b/Code/matthew/django/labs/04_todo/todo_app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Code/matthew/django/labs/04_todo/todo_app/urls.py b/Code/matthew/django/labs/04_todo/todo_app/urls.py new file mode 100644 index 00000000..7f29bc7f --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/urls.py @@ -0,0 +1,26 @@ +"""todo_app 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.urls import path +from . import views + +urlpatterns = [ + path('', views.home, name='home'), + path('edit//', views.edit, name='edit'), + path('delete//', views.delete, name='delete'), + + +] diff --git a/Code/matthew/django/labs/04_todo/todo_app/views.py b/Code/matthew/django/labs/04_todo/todo_app/views.py new file mode 100644 index 00000000..f53c5407 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/views.py @@ -0,0 +1,61 @@ +from itertools import chain +from django.urls import reverse +from django.http import HttpResponseRedirect +from django.shortcuts import redirect, render +from .models import NewTask, Priority +from .forms import NewTaskForm, NewPriority + +# using iterrools chain() to combine NewTask obj w/ Priority obj in a list +# EX ['task1','low','task2','medium','task3','high'] +# Does not combine obj.id: Can not call one obj and get the other +def get_all_obj(): + tasks= NewTask.objects.filter() + important= Priority.objects.filter() + obj_list= sorted( + chain(tasks,important), + key= lambda instance: instance.date + ) + return obj_list + +# Create your views here. +def home(request): + tasks= NewTask.objects.all() + form= NewTaskForm() + + if request.method == 'POST': + form= NewTaskForm(request.POST) + + if form.is_valid(): + form.save() + + return redirect(reverse('home')) + context= { + 'tasks': tasks, + 'form': form, + + + } + return render(request, 'todo_app/index.html', context) + +def edit(request, pk): + task=NewTask.objects.get(id=pk) + imp_lvl= Priority.objects.get(id=pk) + # imp_form=NewPriority(instance=imp_lvl) + form= NewTaskForm(instance=task) + context= { + 'form':form, + # 'imp_form': imp_form + } + if request.method == "POST": + form= NewTaskForm(request.POST, instance=task) + if form.is_valid(): + form.save() + return redirect(reverse('home')) + return render(request, 'todo_app/edit.html', context) + +def delete(request, pk): + NewTask.objects.filter(id=pk).delete() + return redirect(reverse('home')) + + + diff --git a/Code/matthew/django/labs/04_todo/todo_proj/__init__.py b/Code/matthew/django/labs/04_todo/todo_proj/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Code/matthew/django/labs/04_todo/todo_proj/asgi.py b/Code/matthew/django/labs/04_todo/todo_proj/asgi.py new file mode 100644 index 00000000..5a0fd4de --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_proj/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for todo_proj 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_proj.settings') + +application = get_asgi_application() diff --git a/Code/matthew/django/labs/04_todo/todo_proj/settings.py b/Code/matthew/django/labs/04_todo/todo_proj/settings.py new file mode 100644 index 00000000..56e4426f --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_proj/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for todo_proj project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +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-bk(nx6h9#_udk!*16aj2m6o+)yy@)uu9v7lvlt8ouk2ibd5bi%' + +# 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_proj.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_proj.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/Los_Angeles' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.0/howto/static-files/ + +STATIC_URL = 'static/' +STATICFILES_DIRS= [str(BASE_DIR.joinpath('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/matthew/django/labs/04_todo/todo_proj/urls.py b/Code/matthew/django/labs/04_todo/todo_proj/urls.py new file mode 100644 index 00000000..102e3945 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_proj/urls.py @@ -0,0 +1,22 @@ +"""todo_proj 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/matthew/django/labs/04_todo/todo_proj/wsgi.py b/Code/matthew/django/labs/04_todo/todo_proj/wsgi.py new file mode 100644 index 00000000..5f96a37b --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_proj/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for todo_proj 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_proj.settings') + +application = get_wsgi_application() From 9597ad52d93abeae5efc3106548f0fee20a845fe Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Fri, 8 Apr 2022 21:49:17 -0700 Subject: [PATCH 15/20] version one mostly of finished for ToDo lab --- .../django/labs/04_todo/static/css/styles.css | 16 +++++ .../django/labs/04_todo/todo_app/admin.py | 2 +- .../django/labs/04_todo/todo_app/forms.py | 4 +- .../todo_app/migrations/0001_initial.py | 11 ++- ...task_priority_alter_priority_importance.py | 23 ++++++ .../todo_app/migrations/0002_newtask_value.py | 18 ----- .../migrations/0003_alter_newtask_value.py | 18 ----- .../migrations/0003_delete_priority.py | 16 +++++ .../todo_app/migrations/0004_priority.py | 20 ------ .../0005_alter_priority_important.py | 18 ----- ...0006_remove_newtask_value_priority_date.py | 22 ------ .../todo_app/migrations/0007_taggeditem.py | 24 ------- ..._priority_important_priority_importance.py | 22 ------ ...content_type_newtask_object_id_and_more.py | 28 -------- ..._type_remove_newtask_object_id_and_more.py | 26 ------- .../migrations/0011_newtask_content_type.py | 20 ------ .../0012_remove_newtask_content_type.py | 17 ----- .../migrations/0013_newtask_content_type.py | 20 ------ .../django/labs/04_todo/todo_app/models.py | 22 +++--- .../todo_app/templates/todo_app/edit.html | 10 ++- .../todo_app/templates/todo_app/index.html | 70 +++++++++++++++---- .../django/labs/04_todo/todo_app/views.py | 18 ++--- 22 files changed, 144 insertions(+), 301 deletions(-) create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0002_alter_newtask_priority_alter_priority_importance.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0003_delete_priority.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py delete mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py diff --git a/Code/matthew/django/labs/04_todo/static/css/styles.css b/Code/matthew/django/labs/04_todo/static/css/styles.css index d7eec1f4..b2946360 100644 --- a/Code/matthew/django/labs/04_todo/static/css/styles.css +++ b/Code/matthew/django/labs/04_todo/static/css/styles.css @@ -1,5 +1,21 @@ +.logic{ +} +.task_list { +display: flex; +flex-direction: column; + +} .high { + /* justify-content: start; */ +} +.high > ul { + background-color: #FFFF00; + /* color: #FFFF00; */ display: inline-flex; } +.medium { + color: aquamarine; + +} diff --git a/Code/matthew/django/labs/04_todo/todo_app/admin.py b/Code/matthew/django/labs/04_todo/todo_app/admin.py index 93190304..e8e5da58 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/admin.py +++ b/Code/matthew/django/labs/04_todo/todo_app/admin.py @@ -3,4 +3,4 @@ # Register your models here. admin.site.register(NewTask) -admin.site.register(Priority) \ No newline at end of file +# admin.site.register(Priority) \ No newline at end of file diff --git a/Code/matthew/django/labs/04_todo/todo_app/forms.py b/Code/matthew/django/labs/04_todo/todo_app/forms.py index a74b542d..3fc7dfab 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/forms.py +++ b/Code/matthew/django/labs/04_todo/todo_app/forms.py @@ -1,7 +1,7 @@ from django import forms from django.forms import ModelForm -from .models import NewTask, Priority +from .models import NewTask class NewTaskForm(forms.ModelForm): class Meta: @@ -9,5 +9,5 @@ class Meta: fields= "__all__" class NewPriority(forms.ModelForm): class Meta: - model= Priority + fields= "__all__" diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py index 0f00219b..d91382d4 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.0.3 on 2022-04-08 01:23 +# Generated by Django 4.0.3 on 2022-04-09 03:41 from django.db import migrations, models @@ -18,6 +18,15 @@ class Migration(migrations.Migration): ('task', models.CharField(max_length=25)), ('complete', models.BooleanField(default=False)), ('date', models.DateTimeField(auto_now=True)), + ('priority', models.IntegerField(blank=True, default=0)), + ], + ), + migrations.CreateModel( + name='Priority', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('importance', models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High')], default='Low', max_length=6)), + ('date', models.DateTimeField(auto_now=True)), ], ), ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_alter_newtask_priority_alter_priority_importance.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_alter_newtask_priority_alter_priority_importance.py new file mode 100644 index 00000000..af55d64c --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_alter_newtask_priority_alter_priority_importance.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='newtask', + name='priority', + field=models.IntegerField(blank=True, choices=[('1', '1'), ('2', '2'), ('3', '3')], default=0), + ), + migrations.AlterField( + model_name='priority', + name='importance', + field=models.CharField(choices=[('1', '1'), ('2', '2'), ('3', '3')], default='Low', max_length=6), + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py deleted file mode 100644 index b0f7232d..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0002_newtask_value.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-08 02:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='newtask', - name='value', - field=models.IntegerField(default=0), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py deleted file mode 100644 index d0e50827..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_alter_newtask_value.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-08 03:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0002_newtask_value'), - ] - - operations = [ - migrations.AlterField( - model_name='newtask', - name='value', - field=models.IntegerField(blank=True, default=0), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_delete_priority.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_delete_priority.py new file mode 100644 index 00000000..56222341 --- /dev/null +++ b/Code/matthew/django/labs/04_todo/todo_app/migrations/0003_delete_priority.py @@ -0,0 +1,16 @@ +# Generated by Django 4.0.3 on 2022-04-09 03:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('todo_app', '0002_alter_newtask_priority_alter_priority_importance'), + ] + + operations = [ + migrations.DeleteModel( + name='Priority', + ), + ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py deleted file mode 100644 index 5f105b24..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0004_priority.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-08 03:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0003_alter_newtask_value'), - ] - - operations = [ - migrations.CreateModel( - name='Priority', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('important', models.CharField(max_length=10, verbose_name='High Medium or Low')), - ], - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py deleted file mode 100644 index f1b09554..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0005_alter_priority_important.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-08 03:58 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0004_priority'), - ] - - operations = [ - migrations.AlterField( - model_name='priority', - name='important', - field=models.CharField(max_length=10), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py deleted file mode 100644 index 1002ccff..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0006_remove_newtask_value_priority_date.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 01:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0005_alter_priority_important'), - ] - - operations = [ - migrations.RemoveField( - model_name='newtask', - name='value', - ), - migrations.AddField( - model_name='priority', - name='date', - field=models.DateTimeField(auto_now=True), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py deleted file mode 100644 index 4245ba7d..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0007_taggeditem.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 02:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('todo_app', '0006_remove_newtask_value_priority_date'), - ] - - operations = [ - migrations.CreateModel( - name='TaggedItem', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('tag', models.SlugField()), - ('object_id', models.PositiveIntegerField()), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ], - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py deleted file mode 100644 index 20a4ab40..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0008_remove_priority_important_priority_importance.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 02:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0007_taggeditem'), - ] - - operations = [ - migrations.RemoveField( - model_name='priority', - name='important', - ), - migrations.AddField( - model_name='priority', - name='importance', - field=models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High')], default='Low', max_length=6), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py deleted file mode 100644 index 85b728bf..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0009_newtask_content_type_newtask_object_id_and_more.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 03:01 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('todo_app', '0008_remove_priority_important_priority_importance'), - ] - - operations = [ - migrations.AddField( - model_name='newtask', - name='content_type', - field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), - ), - migrations.AddField( - model_name='newtask', - name='object_id', - field=models.PositiveIntegerField(default=False), - ), - migrations.DeleteModel( - name='TaggedItem', - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py deleted file mode 100644 index 3d92a69b..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0010_remove_newtask_content_type_remove_newtask_object_id_and_more.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 03:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0009_newtask_content_type_newtask_object_id_and_more'), - ] - - operations = [ - migrations.RemoveField( - model_name='newtask', - name='content_type', - ), - migrations.RemoveField( - model_name='newtask', - name='object_id', - ), - migrations.AddField( - model_name='newtask', - name='value', - field=models.IntegerField(blank=True, default=0), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py deleted file mode 100644 index 362d5753..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0011_newtask_content_type.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 03:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('todo_app', '0010_remove_newtask_content_type_remove_newtask_object_id_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='newtask', - name='content_type', - field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py deleted file mode 100644 index f48b888b..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0012_remove_newtask_content_type.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 03:26 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('todo_app', '0011_newtask_content_type'), - ] - - operations = [ - migrations.RemoveField( - model_name='newtask', - name='content_type', - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py b/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py deleted file mode 100644 index ea0ea6e4..00000000 --- a/Code/matthew/django/labs/04_todo/todo_app/migrations/0013_newtask_content_type.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.0.3 on 2022-04-09 03:28 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('todo_app', '0012_remove_newtask_content_type'), - ] - - operations = [ - migrations.AddField( - model_name='newtask', - name='content_type', - field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), - ), - ] diff --git a/Code/matthew/django/labs/04_todo/todo_app/models.py b/Code/matthew/django/labs/04_todo/todo_app/models.py index 2aba1061..15849c51 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/models.py +++ b/Code/matthew/django/labs/04_todo/todo_app/models.py @@ -2,30 +2,30 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType LVL= ( - ('low','Low'), - ('medium','Medium'), - ('high','High'), + (1,'Low'), + (2,'Medium'), + (3,'High'), ) # Create your models here. class NewTask(models.Model): task= models.CharField(max_length=25) complete= models.BooleanField(default=False) date= models.DateTimeField(auto_now=True) - value= models.IntegerField(default=0, blank=True) + priority= models.IntegerField(default=0, blank=True, choices=LVL) # trying to join priority and Newtask - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, default=0) + # content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, default=0) # object_id = models.PositiveIntegerField(default=False) # content_object = GenericForeignKey('content_type', 'object_id') def __str__(self): return f'{self.task}' -class Priority(models.Model): - importance= models.CharField(max_length=6,choices=LVL, default='Low') - date= models.DateTimeField(auto_now=True) - # object_id = models.PositiveIntegerField() - def __str__(self): - return f'{self.importance}' +# class Priority(models.Model): +# importance= models.CharField(max_length=6,choices=LVL, default='Low') +# date= models.DateTimeField(auto_now=True) +# # object_id = models.PositiveIntegerField() +# def __str__(self): +# return f'{self.importance}' diff --git a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html index 2b200372..2c93478b 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html +++ b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/edit.html @@ -7,15 +7,13 @@ {% block content %}

    Edit

    -

    ToDo list sorts by Value please set Value to -1 when complete to move to the bottom of the list. - Like wise if the task is important please change value to a higher value. Any value over 5 - will be highlighted -

    +

    ToDo list is sorted by Priority "High" all High Priority items will be highlighted

    {% csrf_token %} - {{form}} - {% comment %} {{imp_form}} {% endcomment %} + Task:{{form.task}} + Priority:{{form.priority}} + Complete:{{form.complete}}
    diff --git a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html index d00e06b7..2a8e3d08 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html +++ b/Code/matthew/django/labs/04_todo/todo_app/templates/todo_app/index.html @@ -13,8 +13,9 @@ Home + + {% block content %} -
    {% csrf_token %} @@ -24,21 +25,62 @@

    ToDo


    - {% for task in tasks %} +
    +
    + {% for task in tasks %} + {% if task.complete == False %} + {% if task.priority == 3 %} +
    + Edit + Delete +
    +
      + {{task}} +
    +
    + {% elif task.priority == 2 %} +
    + Edit + Delete +
    +
      + {{task}} +
    +
    + {% elif task.priority == 1 %} +
    + Edit + Delete +
    +
      + {{task}} +
    +
    + + {% endif %} + + {% elif task.complete == True %} + Edit + Delete +
    +
    +
      + {{task}} +
    +
    + {% endif %} + {% endfor %} +
    +
    + + + + + {% endblock content %} +{% comment "" %} +
    edit - delete -
      - {{task}} -
    - - - -{% endblock content %} - - {% comment "" %} -
    - edit delete
      diff --git a/Code/matthew/django/labs/04_todo/todo_app/views.py b/Code/matthew/django/labs/04_todo/todo_app/views.py index f53c5407..90bd5361 100644 --- a/Code/matthew/django/labs/04_todo/todo_app/views.py +++ b/Code/matthew/django/labs/04_todo/todo_app/views.py @@ -2,24 +2,16 @@ from django.urls import reverse from django.http import HttpResponseRedirect from django.shortcuts import redirect, render -from .models import NewTask, Priority +from .models import NewTask from .forms import NewTaskForm, NewPriority # using iterrools chain() to combine NewTask obj w/ Priority obj in a list # EX ['task1','low','task2','medium','task3','high'] # Does not combine obj.id: Can not call one obj and get the other -def get_all_obj(): - tasks= NewTask.objects.filter() - important= Priority.objects.filter() - obj_list= sorted( - chain(tasks,important), - key= lambda instance: instance.date - ) - return obj_list # Create your views here. def home(request): - tasks= NewTask.objects.all() + tasks= NewTask.objects.order_by("complete") form= NewTaskForm() if request.method == 'POST': @@ -39,12 +31,12 @@ def home(request): def edit(request, pk): task=NewTask.objects.get(id=pk) - imp_lvl= Priority.objects.get(id=pk) - # imp_form=NewPriority(instance=imp_lvl) + + form= NewTaskForm(instance=task) context= { 'form':form, - # 'imp_form': imp_form + } if request.method == "POST": form= NewTaskForm(request.POST, instance=task) From 9ef70e5881f9a17e4cd1db7362b71e3d10bd408d Mon Sep 17 00:00:00 2001 From: Matthew Holmes Date: Tue, 12 Apr 2022 22:53:54 -0700 Subject: [PATCH 16/20] cleaning working tree and adding modifed files --- .../templates/unit_converter_app/index.html | 9 +- .../templates/unit_converter_app/result.html | 3 + .../01_django_redo/unit_converter_app/urls.py | 4 +- .../unit_converter_proj/urls.py | 2 +- .../redo/grocery_app/__init__.py | 0 .../03_grocery_list/redo/grocery_app/admin.py | 6 - .../03_grocery_list/redo/grocery_app/apps.py | 6 - .../grocery_app/migrations/0001_initial.py | 27 ---- .../redo/grocery_app/migrations/__init__.py | 0 .../redo/grocery_app/models.py | 12 -- .../templates/grocery_app/index.html | 31 ----- .../03_grocery_list/redo/grocery_app/tests.py | 3 - .../03_grocery_list/redo/grocery_app/urls.py | 25 ---- .../03_grocery_list/redo/grocery_app/views.py | 41 ------ .../redo/grocery_proj/__init__.py | 0 .../03_grocery_list/redo/grocery_proj/asgi.py | 16 --- .../redo/grocery_proj/settings.py | 125 ------------------ .../03_grocery_list/redo/grocery_proj/urls.py | 22 --- .../03_grocery_list/redo/grocery_proj/wsgi.py | 16 --- .../labs/03_grocery_list/redo/manage.py | 22 --- .../django/labs/04_todo/static/css/styles.css | 26 +++- .../migrations/0004_alter_newtask_priority.py | 18 +++ .../django/labs/04_todo/todo_app/models.py | 2 +- .../todo_app/templates/todo_app/index.html | 38 ++++-- .../django/labs/04_todo/todo_app/views.py | 3 +- 25 files changed, 78 insertions(+), 379 deletions(-) delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/__init__.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/admin.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/apps.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/0001_initial.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/migrations/__init__.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/models.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/templates/grocery_app/index.html delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/tests.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/urls.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_app/views.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/__init__.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/asgi.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/settings.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/urls.py delete mode 100644 Code/matthew/django/labs/03_grocery_list/redo/grocery_proj/wsgi.py delete mode 100755 Code/matthew/django/labs/03_grocery_list/redo/manage.py create mode 100644 Code/matthew/django/labs/04_todo/todo_app/migrations/0004_alter_newtask_priority.py diff --git a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html index f6b00df9..0cd2bdcf 100644 --- a/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html +++ b/Code/matthew/django/labs/01_django_redo/unit_converter_app/templates/unit_converter_app/index.html @@ -8,13 +8,16 @@

      Unit Converter

      - -
      + {% comment %} + try action=" {% url APP_NAME:result %}" + action="ucp/result/" + {% endcomment %} + {% csrf_token %}
      - +