From c2edb39e094556456688759538110f201c108049 Mon Sep 17 00:00:00 2001 From: Rohit Raghavan Date: Tue, 18 Oct 2016 13:09:34 -0700 Subject: [PATCH 1/3] MongoDB Lab --- Labs/Lab11-ORMS/orm_tutorial.zip | Bin 0 -> 19294 bytes .../__pycache__/config.cpython-35.pyc | Bin 0 -> 465 bytes Labs/Lab11-ORMS/orm_tutorial/app.db | Bin 0 -> 9216 bytes Labs/Lab11-ORMS/orm_tutorial/app/__init__.py | 8 ++ Labs/Lab11-ORMS/orm_tutorial/app/__init__.pyc | Bin 0 -> 423 bytes .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 408 bytes .../app/__pycache__/forms.cpython-35.pyc | Bin 0 -> 666 bytes .../app/__pycache__/models.cpython-35.pyc | Bin 0 -> 677 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 1191 bytes Labs/Lab11-ORMS/orm_tutorial/app/forms.py | 9 ++ Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc | Bin 0 -> 718 bytes Labs/Lab11-ORMS/orm_tutorial/app/models.py | 12 +++ Labs/Lab11-ORMS/orm_tutorial/app/models.pyc | Bin 0 -> 776 bytes .../orm_tutorial/app/templates/base.html | 14 +++ .../orm_tutorial/app/templates/customer.html | 30 +++++++ .../orm_tutorial/app/templates/home.html | 31 +++++++ Labs/Lab11-ORMS/orm_tutorial/app/views.py | 30 +++++++ Labs/Lab11-ORMS/orm_tutorial/app/views.pyc | Bin 0 -> 1413 bytes Labs/Lab11-ORMS/orm_tutorial/config.py | 8 ++ Labs/Lab11-ORMS/orm_tutorial/config.pyc | Bin 0 -> 491 bytes Labs/Lab11-ORMS/orm_tutorial/readme.md | 21 +++++ Labs/Lab11-ORMS/orm_tutorial/requirements.txt | 10 +++ Labs/Lab11-ORMS/orm_tutorial/run.py | 2 + .../orm_tutorial/update_database.py | 3 + .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 273 bytes .../app/__pycache__/model.cpython-35.pyc | Bin 0 -> 674 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 2301 bytes Labs/MongoDB_Lab/lab_mongo/app/model.py | 23 ++++- Labs/MongoDB_Lab/lab_mongo/app/views.py | 84 ++++++++++-------- Labs/lab-SQL/lab-SQL/Lab-SQLite/Untitled.rtf | 8 ++ .../__pycache__/config.cpython-35.pyc | Bin 0 -> 319 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db | Bin 0 -> 3072 bytes .../lab-SQL/Lab-SQLite/app/__init__.py | 8 ++ .../lab-SQL/Lab-SQLite/app/__init__.pyc | Bin 0 -> 423 bytes .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 403 bytes .../app/__pycache__/forms.cpython-35.pyc | Bin 0 -> 661 bytes .../app/__pycache__/models.cpython-35.pyc | Bin 0 -> 789 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 1132 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.py | 9 ++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.pyc | Bin 0 -> 718 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.py | 19 ++++ .../lab-SQL/lab-SQL/Lab-SQLite/app/models.pyc | Bin 0 -> 912 bytes .../Lab-SQLite/app/templates/base.html | 14 +++ .../Lab-SQLite/app/templates/customer.html | 29 ++++++ .../Lab-SQLite/app/templates/home.html | 32 +++++++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py | 30 +++++++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc | Bin 0 -> 1350 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py | 9 ++ Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc | Bin 0 -> 491 bytes .../lab-SQL/Lab-SQLite/requirements.txt | 10 +++ Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py | 2 + Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql | 8 ++ Labs/lab-SQL/lab-SQL/Pokemon.db | Bin 0 -> 9216 bytes 53 files changed, 420 insertions(+), 43 deletions(-) create mode 100644 Labs/Lab11-ORMS/orm_tutorial.zip create mode 100644 Labs/Lab11-ORMS/orm_tutorial/__pycache__/config.cpython-35.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app.db create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/__init__.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__init__.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/forms.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/views.cpython-35.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/forms.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/models.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/models.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/views.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/views.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/config.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/config.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/readme.md create mode 100755 Labs/Lab11-ORMS/orm_tutorial/requirements.txt create mode 100755 Labs/Lab11-ORMS/orm_tutorial/run.py create mode 100755 Labs/Lab11-ORMS/orm_tutorial/update_database.py create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/views.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/Untitled.rtf create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/__pycache__/config.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__init__.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__init__.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/forms.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/base.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql create mode 100644 Labs/lab-SQL/lab-SQL/Pokemon.db diff --git a/Labs/Lab11-ORMS/orm_tutorial.zip b/Labs/Lab11-ORMS/orm_tutorial.zip new file mode 100644 index 0000000000000000000000000000000000000000..47b035c550683795b50596e2531c03d3094c6336 GIT binary patch literal 19294 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 literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5d1b5f8e4b06c1545618aabf292b4db03288881 GIT binary patch literal 677 zcmZuuO>5jR5FPn@ceBu5LQbWZ9(+hlZasuhSZE0(8;Dy9z6fQdZoIW@XJnUd=xy_7 z`j>R=DSx3*=*XKbd#La{5A&oqZ=}QNbUeBF^Z6|U_yv0_p!^+$IVOWN2iQS#P>VE3}gqOD%BCzpC}er|)FM zMtxo0_v-zE?qFE%?@`Ps%!GhE{Qw}>hk5GFAEsxEXSvsJ@Z1erO2WXX>dQ~S5uNy* zXP=BhlVNjLb|{v2;+v?mS<|CYCcC)46t~YvnaK!FPmix}uJWuw&AYy9uoP7$+BVaT zRFyet*EZoCRg0WEQ^r{Y_V98y+sTfdrxUle7Fuy`$DETwU%C8%^ZQ;@TLztgjb=^N z>)OT_b*GjJF&?UUhh@FA@uJbKsMj`BT9g&K#>0SnFm^ScAfhk{!2vsBuh@|{ROe}6 geVSw2F1&Kn48)#lb96tsHK*=Cw zP&$x0P`Z%1!060@!h_O-6r~TT4`l<=2A;XVJtzVwLr6nl!h>lOxDOW$cmsF3wmrrW?>+8$|S&7*!mcjS5$H-;t{SLHmLVM(IQ@?zOa zYAn?l9u_}kjN4S5th#t=sK9kd%zNJhR!3S<1YmiS+8^)3GkBUrvwV_rRQPz^0 zW_2k+n)<|xva}dqRtqg`H`?-Tq+8e9XJLU1U*J1j6yha;Vc*sk+hRTUvHxu2FMI|E A<^TWy literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/forms.py b/Labs/Lab11-ORMS/orm_tutorial/app/forms.py new file mode 100755 index 0000000..5724699 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/forms.py @@ -0,0 +1,9 @@ +from flask.ext.wtf import Form +from wtforms import StringField, IntegerField +from flask_wtf.html5 import EmailField +from wtforms.validators import DataRequired + +class CustomerForm(Form): + company = StringField('company', validators=[DataRequired()]) + email = EmailField('email', validators=[DataRequired()]) + # Add additional Address fields here diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc new file mode 100644 index 0000000000000000000000000000000000000000..669b7b78bc49f237a48450483f413c58acf2e047 GIT binary patch literal 718 zcmb_Zu};G<5IrYtS_%~v1L701kgy;zAcUY)Vqr)H5?O-PxFxFHg!o$MTz-=8U}J&1 zq(IrR;+MSho$tMi``+ygKHly|uwE{`&uQBSf|MQs8o&sM1qkL2Xa|f7u?waFaifm9 zpqpSkh`pLOK)1lOA#M|If)X$mkb3Y6umZS`w;*l7&~H`Ro9dYWgYs!K2D7IQ1C+_K0YBYgK8(LY9lLuj~}_BBYCy zwud;U#+lTiEQ)YUj%`pZBi6y!T5jNp199WCQtT3pwY1Yfy#Bas v?ssxRXTc*HeO$@JJvvyY2fyZPGu-(' % self.id diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/models.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aae0dacc6de76977eba1bdca013ff5ec9a8b4e1 GIT binary patch literal 776 zcmb_aJx{|h5Ir}cEiFh)hzYSEWr2ttAw*Fn1{e}RB8wH8qe{sawu6YoR{kWvgN+65 zoE8|^z{)+_cRt^{=QwZcgYo<8^#m5fq4}6h?-3;Q3CI9)0g(WabN~g+I&dc-ao`1D z4sa7WkhlZ^)N&J!{%2@v>l?7+;i=yF|Lfw>S- z_lLj7Wadq=P^mPJRU_}QNuSu+C8&$^p~eYQW@FYP zGR+B8?-^hQuo-$BxX|l_hs$<$cGXeaE4Pk$oM!EoD{9Q{Jet9RKA@Fn wp{amnwhHxW(G^=_TWq-(?KAQ3M-sIBnaw%tV^jX6xE1ZNmFb9ySVcFSPhfALqyPW_ literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html new file mode 100755 index 0000000..db51f24 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html @@ -0,0 +1,14 @@ + + + {% if title %} + {{ title }} - ACME + {% else %} + Welcome to ACME Aircraft Parts + {% endif %} + + + + + {% block content %}{% endblock %} + + diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html new file mode 100755 index 0000000..d7b457a --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Home +
+

Add Customer to Our Database

+
+ {{ form.hidden_tag() }} +
+
+

+ Company name:
+ {{ form.company(size=120) }}
+

+

+ Customer email:
+ {{ form.email(size=120) }}
+

+
+
+
+ +
+

+
+
+
+{% endblock %} diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html new file mode 100755 index 0000000..6b447ec --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Welcome to ACME Aircraft Parts

+ +
+
+

These are all of our awesome customers:

+ + + + + + + + {% for customer in customers %} + + + + + + {% endfor %} +
CompanyEmail
{{ customer.company }}{{ customer.email }}
+
+
+
+{% endblock %} diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/views.py b/Labs/Lab11-ORMS/orm_tutorial/app/views.py new file mode 100755 index 0000000..3fd1bf9 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/views.py @@ -0,0 +1,30 @@ +from flask import render_template, redirect, request +from app import app, models, db +from .forms import CustomerForm + + +@app.route('/') +def index(): + return redirect('/create_customer') + + +@app.route('/create_customer', methods=['GET', 'POST']) +def create_customer(): + form = CustomerForm() + # Capture form data and send to database + if form.validate_on_submit(): + customer = models.Customer( + company=form.company.data, + email=form.email.data) + db.session.add(customer) + db.session.commit() + return redirect('/customers') + return render_template('customer.html', form=form) + + +@app.route('/customers') +def display_customer(): + # Fetch customer data from database + customers = models.Customer.query.all() + return render_template('home.html', + customers=customers) diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/views.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e27a6bdcbd490730bee7effbec3b29388e6a3af3 GIT binary patch literal 1413 zcmbtTO>fgc5S_J?G)a@T>H!ey332d+nje5Fq(Zp`s`@j9(dd;may+QhVl?zO3`C zh>>!9nVT{9O^mu$r!Hpu^HSe?P*Epp}t>!}xq5LN4ke8<* z7nOp_z;OsajTpm35}lQ{$`%bgW3#*vg5#D%=f-etXZz>g7J}sr3Prq?a45eEbD0&n zW&z5@iCdo9+$W4$N~0AvVU;BSJhMasFcXrBGtTAZLO9E`mTEzI9Eep+&`9)7w)hB_ zT$|W^#pRN|Q$Ad0j&V^iP$R`{JJ?ZUHB@&fnz0jS$Z!wQ+!GjR3MuCzBGiDmzzsDU z5k-X%ZWA|vJxA3yZ^vMqG&h~b{@jvzBKS9I(K-|SLLm}@Jcjw3xQzbq ag>uLjc*D!W955v!)1KN>JK>|w)A1iQbs}T{ literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/config.py b/Labs/Lab11-ORMS/orm_tutorial/config.py new file mode 100755 index 0000000..a995426 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/config.py @@ -0,0 +1,8 @@ +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + +SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') +SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') + +WTF_CSRF_ENABLED = True +SECRET_KEY = 'you-will-never-guess' diff --git a/Labs/Lab11-ORMS/orm_tutorial/config.pyc b/Labs/Lab11-ORMS/orm_tutorial/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59af7fd032bca1841f4a4337b62a884ff9163960 GIT binary patch literal 491 zcmZ8dO;5r=5Sle>F@C7MWyOyRv=?R>mFjN#`L>Aj#UXQToW4MG4900HJ2%=N8N04%~r%f#D(;1@3e zl3Rd{4h^rojs8X{K?kn_xC>qtf*tVovIb7GM9st}oq?=o&0j*H@YFO-nK6DGp9CXS z&we!G3C58WDoWP!fRJ^R8m}S@jU}!yF{UX>*{l(vbW)L2*+j9gW~xkvKa#(8Ad;oO zKvf}}^N9$N^E_zeOC&PSoJV4*8WiE&_pDy)n)RP}+j6Z-%VB(IcmH$!?v-u1jN9z) zHZR~NDXM)c@aT4U%dtD04Xn!^YpZNhhqY|x@*DQlBoF?SG{`lF5)*00ezG##D4$gn sn~NyGP#P+w4G2Fp$I)^krYG?_pW}?^G{kd_vh!8ev}659JJd_s7uKI~bpQYW literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/readme.md b/Labs/Lab11-ORMS/orm_tutorial/readme.md new file mode 100755 index 0000000..f5a8d70 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/readme.md @@ -0,0 +1,21 @@ +# Models Lab/Homework +The goal for this lab is to get you comfortable translating your database models into actual code. We will be using [ORMs](https://en.wikipedia.org/wiki/Object-relational_mapping) to help us. The particular ORM that we will be using is SQLAlchemy (the flask implementation is called [Flask-SQLAlchemy](http://flask-sqlalchemy.pocoo.org/2.1/)). + +We'll walk through the example together in class which will give you an idea of how this all works together. Your goal for this lab and homework is to create the remaining models, forms, and routes to complete v2 of the exercise from last week. + +This means that you must: +* Create the following tables and the appropriate relationships: + * customer + * address + * order + * Remember to run update_database.py whenever you make changes to any models. + * This will update the database with your changes. However, **it will delete any data in the database**. +* Create the forms, templates, routes, etc necessary to input this data into the database. +* Create a view to showcase the data into your database (see the current implementation of "home.html" for example) + +The following documentation will help answer any questions you may have. + +## Helpful Documentation +- [Flask-SQLAlchemy](http://flask-sqlalchemy.pocoo.org/2.1/) +- [Accessing SQLite3 Command Shell](https://www.sqlite.org/cli.html) +- [Flask-WTF](https://flask-wtf.readthedocs.org/en/latest/) (flask plugin for creating forms easily) diff --git a/Labs/Lab11-ORMS/orm_tutorial/requirements.txt b/Labs/Lab11-ORMS/orm_tutorial/requirements.txt new file mode 100755 index 0000000..bfbaf81 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/requirements.txt @@ -0,0 +1,10 @@ +Flask==0.10.1 +Flask-SQLAlchemy==2.1 +Flask-WTF==0.12 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +SQLAlchemy==1.0.12 +Werkzeug==0.11.4 +wheel==0.29.0 +WTForms==2.1 diff --git a/Labs/Lab11-ORMS/orm_tutorial/run.py b/Labs/Lab11-ORMS/orm_tutorial/run.py new file mode 100755 index 0000000..5d2f714 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/run.py @@ -0,0 +1,2 @@ +from app import app +app.run(debug=True, host="0.0.0.0", port=8081) diff --git a/Labs/Lab11-ORMS/orm_tutorial/update_database.py b/Labs/Lab11-ORMS/orm_tutorial/update_database.py new file mode 100755 index 0000000..b15e4da --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/update_database.py @@ -0,0 +1,3 @@ +from app import db +db.drop_all() +db.create_all() diff --git a/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc b/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11d824110ed278d0f33036c187662dd17b221766 GIT binary patch literal 273 zcmX|)%}N7749An*om#|#C*NT&jt?LrDvIF8p@^`TFlEPfab{&k*l3Ou9NMoYjcuSO&-v;N>iTX;bUbX* T_|%7XCAFc$4#R2{TRB1%n literal 0 HcmV?d00001 diff --git a/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc b/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33f6fe1c6751369a06c2076474bcecf9d031fc8d GIT binary patch literal 674 zcmYjNOK#gR5FOI`*_MN@g7^qpw7Ni16m?OcKzVpds^y|;xo1Yxu2~HN~@E*7OghArVKm$|&3SiCP z5itkFVLgB<0u{kJhAIKcK@Q+Meoa9}Ame~D`h8I(zmW^(^?(jsbiTqp!|g6H^nn|D z4=Bjtz=-S+D5uCqD1s@H5{eNe0VRmifKr$?DLgV@IP#*%=04jxWm~aPK2{siXdl-` z8|$N$G16x{QH#DY?Za@TUN6PlKw z7R%cW<)!Gla$}^@Z@Rso9L29xZLD+?6me%5faNSSe0ldsVZ$zTW!vufKnM84>+SE0>S{BiuR` zL>c~qa-u>|BB*dEaY(S$q1>gyqr{`ar^Kfspd_Foq$H#wq9meXjgqxywM%)6k`~Dp z9p9kLqYFV&(4fuj@j7Mx!ovN4`&md?M86RC@lQI-m1~r>D8nIb8atR08Mbs5E0gYW zS=S!2LD}YVYGXNd(@t$sw!NI%Tu$x$>+oI5ZY`JHw9ByZwmsnvWp|fT+myM~@9lkH zBzunWi?eh(#iPn(-V02qf`KsV*KLU&lY-ARVjfXi}?me3YK1W&E_7DFhwAeDz&=xMkw?6d(#SEFCamjcfwrF4rc|FHs(OPLXc!O_4*+N(I8gjZ~6F
u_HLL$Ss;{x+GAht|fuvoG5y)cf5Xa}TlsSl=cVK;2JJ{TK?pZgDJFTYb|9uS_ zZ}zZNvm(d=CqmstZ{CX2@mR?*#D3{5>z4Vm9K1jW=)*x)>=#SLilt)9fN8iUU1*lw z4+vzSR)CKS;q`k_6GY;_;B1?BE?;f+sycX8($>RD$-$un6EeBcjM7mpmGOtwtgJ!V zr?O5q($n$alWpBAi`|-Z>#9!kfs%S!m5}!$6|S=ymh#;+9m}ua$%5Cm*m442-GgP` ziS_KTnAH1C-dzIbVv<#00plXGNOYt$qzft=@cvkWca`o<`nwI7f+j@ovD~3!myQ9Q zEyd?hg$G?t}U%CSbaJUxZa%Gg%>W=i1Kc0IIPeh zCQ!z4$c1qGJlEmvO=5KqR2uS`hW+hplfNoX4kx*5p zn=KTP76{Y~9^&qY~!m0U~ZWvxUUxt&pCXRSn&caBK#2hu`S zVktY9^LbH9&Y6=4lzPqfX7QN&(R9p%$;D+DTy=ve@TWn{Z-d7zC|6(mmd_jdfKnk< zbzU?|WVu+2iu!e{P$Ip)3q|s)nvj+v@uK^X>Y?vNBk5CJ&5P`Kwdvf`Wu3OAJkxIi Lw6*M#L)#`_U=dVl literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db new file mode 100644 index 0000000000000000000000000000000000000000..d1f1fbe1160bf5548f01ac79a7cdbc50f9b97d4f GIT binary patch literal 3072 zcmeHGJxfC|6uo&j+7ECmbZ}@k6>1m%K&!m1i*3QNq-|_N-+L)(p7?O;=IGz>r*w65 zadB~RaT6R&N-GtF>LL_!;hcLp_XBbu?enHIf?X;dbHh%60wGXm3;;?NxCF5|XF)Ai z;j~Rrg5&qwJv&7(1x#_iX~Fls16$z$e!yM1QX#V$CAmd$VR$bR{d8(nEcEoN2+mqz zqZ6`D;UdBZfk=iIy?f85@hNY9~}Y;Yr4fxHc?N z7HJe&UBp~Q-__!g`LZL?Igr*p)**-kVdy1Bo-R>d>w zgXQL;YpePxUtXLe`1 mq0UrH17a!bwzg76{lW4E7u2*y%{v(kvSk1D^bPzHj8RcqyZAvdySSIycw z<=D;LSQdYX%rPyCQ}oU-32)UZh8vj>Rb910j8rDqbN6k`p(CDiumAl_FRnBwvhMdv_!3WNSO6J(rj1EBVTa z7vR8&@usB}R`TVWKhHO#?9FCna{K$s5druKk4}PoA7A?wLEu9`0cZl0010*kDgqq? zjX@_slgS%{Nr z)4K2lV?EcBF<&yK2QjL^E5Ze`PFcZtozGN#EwzlUii Zwu?SryqdQ18h<^oVF7cpN9JT6{RKU0nQQ<6 literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db2556a5bfea00e94b5b70e437691fa862ade647 GIT binary patch literal 789 zcmY*WO>fgc5S{fVPCpV+^#B(RKE|ljhn5?nps0tSkg7>PP%e>UZ(2uoHq5SDQYEKy z=XdazeC5PnKpdEHN=a9q=iTSo=b1Op8;z|uSAQ-)IRHOlZP6LtQ6`yIHSTD;*ttE?R_Tf`?7oIhO^mzJi0q} zUNh3!ES%2wJe7q>>U$R-I_JlIuX(iR9r=E>kmgHT)FM5ds>l{@l%vsD)YMlMy=!qFO2ylI{@X_ydsJ`+X6d8~SB{`Z}=~UR{Sb;WTJzQdA~rpLD{}1Jcd} zX*hb_KkYoeiR5!)RX{BTnT}Oz_Gk0rSu!PEJN(xa`)Rfaz}Xdb;ffuB4LU_k@sbpq z6fFw#k>H8php=2RrNcuqoW@aFyA*8rq{`;gXeMqs5eFU|rx84H{Dn~|dFH+H#;CLZ zp8GZA(Ib~JkUf1n*hYOj9EXwBI7coYs|3ZySlQ@0OjBPX*Nfa#;i58mYD-U7P-l7< zmBmEes7D_RH@#*=UAz>yL!4h3)M%>YRNicmtIPW4 EUxrAuQ2+n{ literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0b5aa206b1785d37c7ee459a595fe2c82545af7 GIT binary patch literal 1132 zcmZWo%}yIJ5FYPOk_}lBqL!*E_i7JiPu!}i5^7N;6j}v@v=_9A4cT;^O~+1JA~?}U z=u7ZQzV^f`pdLDQNQ$Vn9*;e<<8QthZ^v zG*IvY#Za3%if=QaGB&;iTjiELALM3OOB?(dO-a^VW_J8B53(_h*#?FNXya$=frywVMGYB?mRCGZdt7+ zXKFT(1=Vm^$!R{hGyxfM6AGCZCDyEayOXlvR} zs%HF{p_E>U(d^f!|w1BkHnc z&e4hjML1n1T@)G%G5^<2YMBSaZHoOAeTNr{di`>p`Ac$AHWCo@h~W#;dP!`;^D`Ro9dYWgYs!K2D7IQ1C+_K0YBYgK8(LY9lLuj~}_BBYCy zwud;U#+lTiEQ)YUj%`pZBi6y!T5jNp199WCQtT3pwY1Yfy#Bas v?ssxRXTc*HeO$@JJvvyY2fyZPGu-(rxz>s=N8H<^iOFr;-LxLuJ=J%? z-{vpTAE4iCP7lE+4ViBzlbtU!-)zF~*RFo~`t4NG;tH@nf!RBN5pF>h(OW^IfIh(q zXcT%U1@rxKhcf{I~|&huK4bBPx+B=u*(@QxMUAx=@jt2cl_9D*#hJz(B6JEM2@0oaF88GN9pm)NVeALS{WO~QrAsB znQp5(FRHER_0tz82ZJcy+uqxXSGg!AvmYvV1*_DPiIUDSwQP;m#)s8MC0nPuu&(RE z`Cb<(p5HN-|Ar?7QMa}x#tZUb@54(@Eb2;{+?*%Rlzs1Xlhk^oDtphhPMadH5_GkQ z?KD$&16jocS#J2NFJCijOJY;>#VsM(=O|ac53?!Y55XVOyo-2+hY%d&@Y2o&3tq0W z_!v#u^AqvYd4AZ*jxqd2_S^g+RY9@nZZtN!UJ4(xoEeNV0q|mE`oeAC!RU+OIG1R4 zn(;x&xNyhqjFppTc~$udXP$z?UU;KyTRAVJhksOa6MRNFQ>b(GTTi==sO?9 + + {% if title %} + {{ title }} - ACME + {% else %} + Welcome to ACME Aircraft Parts + {% endif %} + + + + + {% block content %}{% endblock %} + + diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html new file mode 100755 index 0000000..36c49b4 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Home +
+

Add Customer to Our Database

+
+ {{ form.hidden_tag() }} +
+
+ +

Company name:
+ {{ form.company(size=120) }}
+

+

Customer email:
+ {{ form.email(size=120) }}
+

+
+
+
+ +
+

+
+
+
+{% endblock %} diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html new file mode 100755 index 0000000..8f06a97 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Welcome to ACME Aircraft Parts

+ +
+
+

These are all of our awesome customers:

+ + + + + + + + + + {% for customer in customers %} + + + + + {% endfor %} + +
CompanyEmail
{{ customer['company']}} {{ customer['email']}}
+
+
+
+{% endblock %} diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py new file mode 100755 index 0000000..da7cde1 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py @@ -0,0 +1,30 @@ +from flask import render_template, redirect, request +from app import app, models, db +from .forms import CustomerForm +# Access the models file to use SQL functions + + +@app.route('/') +def index(): + return redirect('/create_customer') + + +@app.route('/create_customer', methods=['GET', 'POST']) +def create_customer(): + form = CustomerForm() + if form.validate_on_submit(): + # Get data from the form + # Send data from form to Database + company = form.company.data + email = form.email.data + models.insert_customer(company, email) + return redirect('/customers') + return render_template('customer.html', form=form) + + +@app.route('/customers') +def display_customer(): + # Retreive data from database to display + customers = models.retrieve_customers() + return render_template('home.html', + customers=customers) diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38f8e5c49f893bb7fa6664626a44f2263ccb9df8 GIT binary patch literal 1350 zcmbtU&2G~`5T3P@G;x!*{Bx){aj=l6c>sivS}3Q0oFF7$DmS~OZoRSD-2^JNr}8vB z5Dx+m0N436; zbVyl9f^z|t9nu}jV7rucN%tu0As3SDP`O6BPg%cN+oiHgQ`Mo90m&X+3X*H|mDtH5 zx{CKnA{&uhr;h+PD6-@DPqha@*?5^tg0;uk(~2+wW87&Vv595|)xGIz@L zeM}Zc&752FlTQm}U9*F?<#p|P7DabqvD(tEuZ?eD`)T z_5E;=1HPXr9Q1QZbU}1ZbRyU{d)^P|B%}-BeGm;lAXIXW2-plr09^=*k-)W(4}^j< z!1E;L8^#{4q=m%V5rXY(=h*4eS9ZkEGn*-s zMB)YtGhV>LSds7ulRrt=e*^geSRmTM8Dh!U4q%U=)&@JCwP;!|MUS0P&J=2SEk)a4 zz*nYsVg9#smb)x0-ompL*7p#z%ptel6$3Gj8E#L|QJLFQUqizPt2gC_Qbr(UX*cVj z1KVhTW2Ra-m2#8m9X9u2u1ojczcI&UKF8a(DAfxF#q$5aw%8V1A_^aN9!I|csD2q* literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py new file mode 100755 index 0000000..bbbb224 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py @@ -0,0 +1,9 @@ +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + +# Will be used for ORM Lab +# SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') +# SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') + +WTF_CSRF_ENABLED = True +SECRET_KEY = 'you-will-never-guess' diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59af7fd032bca1841f4a4337b62a884ff9163960 GIT binary patch literal 491 zcmZ8dO;5r=5Sle>F@C7MWyOyRv=?R>mFjN#`L>Aj#UXQToW4MG4900HJ2%=N8N04%~r%f#D(;1@3e zl3Rd{4h^rojs8X{K?kn_xC>qtf*tVovIb7GM9st}oq?=o&0j*H@YFO-nK6DGp9CXS z&we!G3C58WDoWP!fRJ^R8m}S@jU}!yF{UX>*{l(vbW)L2*+j9gW~xkvKa#(8Ad;oO zKvf}}^N9$N^E_zeOC&PSoJV4*8WiE&_pDy)n)RP}+j6Z-%VB(IcmH$!?v-u1jN9z) zHZR~NDXM)c@aT4U%dtD04Xn!^YpZNhhqY|x@*DQlBoF?SG{`lF5)*00ezG##D4$gn sn~NyGP#P+w4G2Fp$I)^krYG?_pW}?^G{kd_vh!8ev}659JJd_s7uKI~bpQYW literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt b/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt new file mode 100755 index 0000000..bfbaf81 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt @@ -0,0 +1,10 @@ +Flask==0.10.1 +Flask-SQLAlchemy==2.1 +Flask-WTF==0.12 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +SQLAlchemy==1.0.12 +Werkzeug==0.11.4 +wheel==0.29.0 +WTForms==2.1 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py new file mode 100755 index 0000000..5d2f714 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py @@ -0,0 +1,2 @@ +from app import app +app.run(debug=True, host="0.0.0.0", port=8081) diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql b/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql new file mode 100644 index 0000000..aa10b84 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql @@ -0,0 +1,8 @@ +-- Insert code to create Database Schema +-- This will create your .db database file for use +drop table if exists customers; +create table customers ( + customer_id integer primary key, + company text not null, + email text not null +); diff --git a/Labs/lab-SQL/lab-SQL/Pokemon.db b/Labs/lab-SQL/lab-SQL/Pokemon.db new file mode 100644 index 0000000000000000000000000000000000000000..0dd44fa9f56a01bc03c74ed614c8d9714627a3fd GIT binary patch literal 9216 zcmeHN&2Jk;6rY*r{c>VL^HIx+Rt&iiD@j|ykqc?MsRD^p97ky`*c*G2E?)0CyK79u z1-DX_KcEugU*Lemt;ZfBHJ3_UkT@X3iE@BLQ8{p9#_OSW(uAslHY&TyWXAL6CqxUF92#xV%@I-paLEKZr zKjIZ^$sV1Wu4OM?#5dcKz2&l|UuO;9E4zNxjvU_$k5#A(MQgrf(bD|oWs4pY(`lzh z9WP=#ETGN6Y1qLYt+PGq`4RP6t~;BSW0yUf=d~d%o6X|RXI*nzAq&FpKYc*$sczjAolYASr&ckR3MK2RRiuU05-qGR zFVkzqrIq>OCjG$Lr1R^g)ujUOzhV_iv%H7UyJD2A>%4KVgQy;`E0(A89aqz`b94CC z&;Y(wyBW0tR+Bc!`5D@VnZ=hRr3TYj3MLT@?A3G&6&qP29jAfTA8$bs^-Xf0Yr ztFU0L(Jq*L-Sgbsk5nydn)ud8zq#^T6e%>q`2v~Sx_+w z>nm1qY2oj+qgSlO`Ss-zef!d-emtVR=Fw$N=dTepJ2QhfyXJ+vF5kN4knOgZS7k>& z!ho?ygwsOTS>7|>+lgW?i@h#V{9Wz|k}N?WLE!8nplc~Kfmq;Fbybv_cJN6$l|nhx z4EPyZPlG7eY|mk?PDG2U9r!wyZ8Pu#0yrS>I~>46`10&pnrN0F@IOKzufqn8kL|6% zZwnVHVB**=SADnD@X8)*m%Dy|Hm<-NmTrdh*5b@cn;5gRkHY`~siD$M66);0jzg zYlbKKBnZ501jY>oWr@jMXxB%F%w^Sxd*0`C1?9*@!`|V16FS^>0(MU04RMauZBAk} zeJAw2F-5e>)$MxAv&l?c38N`qi*s$pYA(yhmE%M~Cdr1oEhmUvhQ4dt5ep`;g5D$( z)f+aa>bx53%@jjoWJm@bo>vt#NzA5Gx2rc=b|AdV}P)TJDw|+N}WJkLSv8 z8HPuQ|0Pd?K!U)ljzEU{04Bc7f;#_o*aNZu6|{@sYw|#F^Ss!5{v&R_vpF17{&qh{ z`|nf!vvhzFKf?5%O7y2s;`sx%&G<_g=UQd|us;rvPx$|*Ml2+4e=N|^&vz&M|4ZTj zGjI>7aGURc_yT_A48U!;FMk1&JV78q;6)%XBDniW!QB^Gt?m1@2|?ArC8+u}+oOwt z?Nyzy>c1{{dsDQN2RPSG%ng9R* literal 0 HcmV?d00001 From 2efee7d9b4217ff95214e67bd57a94b446663055 Mon Sep 17 00:00:00 2001 From: Rohit Raghavan Date: Tue, 18 Oct 2016 13:09:34 -0700 Subject: [PATCH 2/3] MongoDB Lab --- Labs/Lab11-ORMS/orm_tutorial.zip | Bin 0 -> 19294 bytes .../__pycache__/config.cpython-35.pyc | Bin 0 -> 465 bytes Labs/Lab11-ORMS/orm_tutorial/app.db | Bin 0 -> 9216 bytes Labs/Lab11-ORMS/orm_tutorial/app/__init__.py | 8 ++ Labs/Lab11-ORMS/orm_tutorial/app/__init__.pyc | Bin 0 -> 423 bytes .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 408 bytes .../app/__pycache__/forms.cpython-35.pyc | Bin 0 -> 666 bytes .../app/__pycache__/models.cpython-35.pyc | Bin 0 -> 677 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 1191 bytes Labs/Lab11-ORMS/orm_tutorial/app/forms.py | 9 ++ Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc | Bin 0 -> 718 bytes Labs/Lab11-ORMS/orm_tutorial/app/models.py | 12 +++ Labs/Lab11-ORMS/orm_tutorial/app/models.pyc | Bin 0 -> 776 bytes .../orm_tutorial/app/templates/base.html | 14 +++ .../orm_tutorial/app/templates/customer.html | 30 +++++++ .../orm_tutorial/app/templates/home.html | 31 +++++++ Labs/Lab11-ORMS/orm_tutorial/app/views.py | 30 +++++++ Labs/Lab11-ORMS/orm_tutorial/app/views.pyc | Bin 0 -> 1413 bytes Labs/Lab11-ORMS/orm_tutorial/config.py | 8 ++ Labs/Lab11-ORMS/orm_tutorial/config.pyc | Bin 0 -> 491 bytes Labs/Lab11-ORMS/orm_tutorial/readme.md | 21 +++++ Labs/Lab11-ORMS/orm_tutorial/requirements.txt | 10 +++ Labs/Lab11-ORMS/orm_tutorial/run.py | 2 + .../orm_tutorial/update_database.py | 3 + .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 273 bytes .../app/__pycache__/model.cpython-35.pyc | Bin 0 -> 674 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 2301 bytes Labs/MongoDB_Lab/lab_mongo/app/model.py | 23 ++++- Labs/MongoDB_Lab/lab_mongo/app/views.py | 84 ++++++++++-------- Labs/lab-SQL/lab-SQL/Lab-SQLite/Untitled.rtf | 8 ++ .../__pycache__/config.cpython-35.pyc | Bin 0 -> 319 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db | Bin 0 -> 3072 bytes .../lab-SQL/Lab-SQLite/app/__init__.py | 8 ++ .../lab-SQL/Lab-SQLite/app/__init__.pyc | Bin 0 -> 423 bytes .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 403 bytes .../app/__pycache__/forms.cpython-35.pyc | Bin 0 -> 661 bytes .../app/__pycache__/models.cpython-35.pyc | Bin 0 -> 789 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 1132 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.py | 9 ++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.pyc | Bin 0 -> 718 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.py | 19 ++++ .../lab-SQL/lab-SQL/Lab-SQLite/app/models.pyc | Bin 0 -> 912 bytes .../Lab-SQLite/app/templates/base.html | 14 +++ .../Lab-SQLite/app/templates/customer.html | 29 ++++++ .../Lab-SQLite/app/templates/home.html | 32 +++++++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py | 30 +++++++ Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc | Bin 0 -> 1350 bytes Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py | 9 ++ Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc | Bin 0 -> 491 bytes .../lab-SQL/Lab-SQLite/requirements.txt | 10 +++ Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py | 2 + Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql | 8 ++ Labs/lab-SQL/lab-SQL/Pokemon.db | Bin 0 -> 9216 bytes 53 files changed, 420 insertions(+), 43 deletions(-) create mode 100644 Labs/Lab11-ORMS/orm_tutorial.zip create mode 100644 Labs/Lab11-ORMS/orm_tutorial/__pycache__/config.cpython-35.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app.db create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/__init__.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__init__.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/forms.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/views.cpython-35.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/forms.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/models.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/models.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html create mode 100755 Labs/Lab11-ORMS/orm_tutorial/app/views.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/app/views.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/config.py create mode 100644 Labs/Lab11-ORMS/orm_tutorial/config.pyc create mode 100755 Labs/Lab11-ORMS/orm_tutorial/readme.md create mode 100755 Labs/Lab11-ORMS/orm_tutorial/requirements.txt create mode 100755 Labs/Lab11-ORMS/orm_tutorial/run.py create mode 100755 Labs/Lab11-ORMS/orm_tutorial/update_database.py create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc create mode 100644 Labs/MongoDB_Lab/lab_mongo/app/__pycache__/views.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/Untitled.rtf create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/__pycache__/config.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__init__.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__init__.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/forms.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/forms.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/models.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/base.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt create mode 100755 Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py create mode 100644 Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql create mode 100644 Labs/lab-SQL/lab-SQL/Pokemon.db diff --git a/Labs/Lab11-ORMS/orm_tutorial.zip b/Labs/Lab11-ORMS/orm_tutorial.zip new file mode 100644 index 0000000000000000000000000000000000000000..47b035c550683795b50596e2531c03d3094c6336 GIT binary patch literal 19294 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 literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5d1b5f8e4b06c1545618aabf292b4db03288881 GIT binary patch literal 677 zcmZuuO>5jR5FPn@ceBu5LQbWZ9(+hlZasuhSZE0(8;Dy9z6fQdZoIW@XJnUd=xy_7 z`j>R=DSx3*=*XKbd#La{5A&oqZ=}QNbUeBF^Z6|U_yv0_p!^+$IVOWN2iQS#P>VE3}gqOD%BCzpC}er|)FM zMtxo0_v-zE?qFE%?@`Ps%!GhE{Qw}>hk5GFAEsxEXSvsJ@Z1erO2WXX>dQ~S5uNy* zXP=BhlVNjLb|{v2;+v?mS<|CYCcC)46t~YvnaK!FPmix}uJWuw&AYy9uoP7$+BVaT zRFyet*EZoCRg0WEQ^r{Y_V98y+sTfdrxUle7Fuy`$DETwU%C8%^ZQ;@TLztgjb=^N z>)OT_b*GjJF&?UUhh@FA@uJbKsMj`BT9g&K#>0SnFm^ScAfhk{!2vsBuh@|{ROe}6 geVSw2F1&Kn48)#lb96tsHK*=Cw zP&$x0P`Z%1!060@!h_O-6r~TT4`l<=2A;XVJtzVwLr6nl!h>lOxDOW$cmsF3wmrrW?>+8$|S&7*!mcjS5$H-;t{SLHmLVM(IQ@?zOa zYAn?l9u_}kjN4S5th#t=sK9kd%zNJhR!3S<1YmiS+8^)3GkBUrvwV_rRQPz^0 zW_2k+n)<|xva}dqRtqg`H`?-Tq+8e9XJLU1U*J1j6yha;Vc*sk+hRTUvHxu2FMI|E A<^TWy literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/forms.py b/Labs/Lab11-ORMS/orm_tutorial/app/forms.py new file mode 100755 index 0000000..5724699 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/forms.py @@ -0,0 +1,9 @@ +from flask.ext.wtf import Form +from wtforms import StringField, IntegerField +from flask_wtf.html5 import EmailField +from wtforms.validators import DataRequired + +class CustomerForm(Form): + company = StringField('company', validators=[DataRequired()]) + email = EmailField('email', validators=[DataRequired()]) + # Add additional Address fields here diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/forms.pyc new file mode 100644 index 0000000000000000000000000000000000000000..669b7b78bc49f237a48450483f413c58acf2e047 GIT binary patch literal 718 zcmb_Zu};G<5IrYtS_%~v1L701kgy;zAcUY)Vqr)H5?O-PxFxFHg!o$MTz-=8U}J&1 zq(IrR;+MSho$tMi``+ygKHly|uwE{`&uQBSf|MQs8o&sM1qkL2Xa|f7u?waFaifm9 zpqpSkh`pLOK)1lOA#M|If)X$mkb3Y6umZS`w;*l7&~H`Ro9dYWgYs!K2D7IQ1C+_K0YBYgK8(LY9lLuj~}_BBYCy zwud;U#+lTiEQ)YUj%`pZBi6y!T5jNp199WCQtT3pwY1Yfy#Bas v?ssxRXTc*HeO$@JJvvyY2fyZPGu-(' % self.id diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/models.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aae0dacc6de76977eba1bdca013ff5ec9a8b4e1 GIT binary patch literal 776 zcmb_aJx{|h5Ir}cEiFh)hzYSEWr2ttAw*Fn1{e}RB8wH8qe{sawu6YoR{kWvgN+65 zoE8|^z{)+_cRt^{=QwZcgYo<8^#m5fq4}6h?-3;Q3CI9)0g(WabN~g+I&dc-ao`1D z4sa7WkhlZ^)N&J!{%2@v>l?7+;i=yF|Lfw>S- z_lLj7Wadq=P^mPJRU_}QNuSu+C8&$^p~eYQW@FYP zGR+B8?-^hQuo-$BxX|l_hs$<$cGXeaE4Pk$oM!EoD{9Q{Jet9RKA@Fn wp{amnwhHxW(G^=_TWq-(?KAQ3M-sIBnaw%tV^jX6xE1ZNmFb9ySVcFSPhfALqyPW_ literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html new file mode 100755 index 0000000..db51f24 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/base.html @@ -0,0 +1,14 @@ + + + {% if title %} + {{ title }} - ACME + {% else %} + Welcome to ACME Aircraft Parts + {% endif %} + + + + + {% block content %}{% endblock %} + + diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html new file mode 100755 index 0000000..d7b457a --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/customer.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Home +
+

Add Customer to Our Database

+
+ {{ form.hidden_tag() }} +
+
+

+ Company name:
+ {{ form.company(size=120) }}
+

+

+ Customer email:
+ {{ form.email(size=120) }}
+

+
+
+
+ +
+

+
+
+
+{% endblock %} diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html b/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html new file mode 100755 index 0000000..6b447ec --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/templates/home.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Welcome to ACME Aircraft Parts

+ +
+
+

These are all of our awesome customers:

+ + + + + + + + {% for customer in customers %} + + + + + + {% endfor %} +
CompanyEmail
{{ customer.company }}{{ customer.email }}
+
+
+
+{% endblock %} diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/views.py b/Labs/Lab11-ORMS/orm_tutorial/app/views.py new file mode 100755 index 0000000..3fd1bf9 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/app/views.py @@ -0,0 +1,30 @@ +from flask import render_template, redirect, request +from app import app, models, db +from .forms import CustomerForm + + +@app.route('/') +def index(): + return redirect('/create_customer') + + +@app.route('/create_customer', methods=['GET', 'POST']) +def create_customer(): + form = CustomerForm() + # Capture form data and send to database + if form.validate_on_submit(): + customer = models.Customer( + company=form.company.data, + email=form.email.data) + db.session.add(customer) + db.session.commit() + return redirect('/customers') + return render_template('customer.html', form=form) + + +@app.route('/customers') +def display_customer(): + # Fetch customer data from database + customers = models.Customer.query.all() + return render_template('home.html', + customers=customers) diff --git a/Labs/Lab11-ORMS/orm_tutorial/app/views.pyc b/Labs/Lab11-ORMS/orm_tutorial/app/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e27a6bdcbd490730bee7effbec3b29388e6a3af3 GIT binary patch literal 1413 zcmbtTO>fgc5S_J?G)a@T>H!ey332d+nje5Fq(Zp`s`@j9(dd;may+QhVl?zO3`C zh>>!9nVT{9O^mu$r!Hpu^HSe?P*Epp}t>!}xq5LN4ke8<* z7nOp_z;OsajTpm35}lQ{$`%bgW3#*vg5#D%=f-etXZz>g7J}sr3Prq?a45eEbD0&n zW&z5@iCdo9+$W4$N~0AvVU;BSJhMasFcXrBGtTAZLO9E`mTEzI9Eep+&`9)7w)hB_ zT$|W^#pRN|Q$Ad0j&V^iP$R`{JJ?ZUHB@&fnz0jS$Z!wQ+!GjR3MuCzBGiDmzzsDU z5k-X%ZWA|vJxA3yZ^vMqG&h~b{@jvzBKS9I(K-|SLLm}@Jcjw3xQzbq ag>uLjc*D!W955v!)1KN>JK>|w)A1iQbs}T{ literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/config.py b/Labs/Lab11-ORMS/orm_tutorial/config.py new file mode 100755 index 0000000..a995426 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/config.py @@ -0,0 +1,8 @@ +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + +SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') +SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') + +WTF_CSRF_ENABLED = True +SECRET_KEY = 'you-will-never-guess' diff --git a/Labs/Lab11-ORMS/orm_tutorial/config.pyc b/Labs/Lab11-ORMS/orm_tutorial/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59af7fd032bca1841f4a4337b62a884ff9163960 GIT binary patch literal 491 zcmZ8dO;5r=5Sle>F@C7MWyOyRv=?R>mFjN#`L>Aj#UXQToW4MG4900HJ2%=N8N04%~r%f#D(;1@3e zl3Rd{4h^rojs8X{K?kn_xC>qtf*tVovIb7GM9st}oq?=o&0j*H@YFO-nK6DGp9CXS z&we!G3C58WDoWP!fRJ^R8m}S@jU}!yF{UX>*{l(vbW)L2*+j9gW~xkvKa#(8Ad;oO zKvf}}^N9$N^E_zeOC&PSoJV4*8WiE&_pDy)n)RP}+j6Z-%VB(IcmH$!?v-u1jN9z) zHZR~NDXM)c@aT4U%dtD04Xn!^YpZNhhqY|x@*DQlBoF?SG{`lF5)*00ezG##D4$gn sn~NyGP#P+w4G2Fp$I)^krYG?_pW}?^G{kd_vh!8ev}659JJd_s7uKI~bpQYW literal 0 HcmV?d00001 diff --git a/Labs/Lab11-ORMS/orm_tutorial/readme.md b/Labs/Lab11-ORMS/orm_tutorial/readme.md new file mode 100755 index 0000000..f5a8d70 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/readme.md @@ -0,0 +1,21 @@ +# Models Lab/Homework +The goal for this lab is to get you comfortable translating your database models into actual code. We will be using [ORMs](https://en.wikipedia.org/wiki/Object-relational_mapping) to help us. The particular ORM that we will be using is SQLAlchemy (the flask implementation is called [Flask-SQLAlchemy](http://flask-sqlalchemy.pocoo.org/2.1/)). + +We'll walk through the example together in class which will give you an idea of how this all works together. Your goal for this lab and homework is to create the remaining models, forms, and routes to complete v2 of the exercise from last week. + +This means that you must: +* Create the following tables and the appropriate relationships: + * customer + * address + * order + * Remember to run update_database.py whenever you make changes to any models. + * This will update the database with your changes. However, **it will delete any data in the database**. +* Create the forms, templates, routes, etc necessary to input this data into the database. +* Create a view to showcase the data into your database (see the current implementation of "home.html" for example) + +The following documentation will help answer any questions you may have. + +## Helpful Documentation +- [Flask-SQLAlchemy](http://flask-sqlalchemy.pocoo.org/2.1/) +- [Accessing SQLite3 Command Shell](https://www.sqlite.org/cli.html) +- [Flask-WTF](https://flask-wtf.readthedocs.org/en/latest/) (flask plugin for creating forms easily) diff --git a/Labs/Lab11-ORMS/orm_tutorial/requirements.txt b/Labs/Lab11-ORMS/orm_tutorial/requirements.txt new file mode 100755 index 0000000..bfbaf81 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/requirements.txt @@ -0,0 +1,10 @@ +Flask==0.10.1 +Flask-SQLAlchemy==2.1 +Flask-WTF==0.12 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +SQLAlchemy==1.0.12 +Werkzeug==0.11.4 +wheel==0.29.0 +WTForms==2.1 diff --git a/Labs/Lab11-ORMS/orm_tutorial/run.py b/Labs/Lab11-ORMS/orm_tutorial/run.py new file mode 100755 index 0000000..5d2f714 --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/run.py @@ -0,0 +1,2 @@ +from app import app +app.run(debug=True, host="0.0.0.0", port=8081) diff --git a/Labs/Lab11-ORMS/orm_tutorial/update_database.py b/Labs/Lab11-ORMS/orm_tutorial/update_database.py new file mode 100755 index 0000000..b15e4da --- /dev/null +++ b/Labs/Lab11-ORMS/orm_tutorial/update_database.py @@ -0,0 +1,3 @@ +from app import db +db.drop_all() +db.create_all() diff --git a/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc b/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11d824110ed278d0f33036c187662dd17b221766 GIT binary patch literal 273 zcmX|)%}N7749An*om#|#C*NT&jt?LrDvIF8p@^`TFlEPfab{&k*l3Ou9NMoYjcuSO&-v;N>iTX;bUbX* T_|%7XCAFc$4#R2{TRB1%n literal 0 HcmV?d00001 diff --git a/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc b/Labs/MongoDB_Lab/lab_mongo/app/__pycache__/model.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33f6fe1c6751369a06c2076474bcecf9d031fc8d GIT binary patch literal 674 zcmYjNOK#gR5FOI`*_MN@g7^qpw7Ni16m?OcKzVpds^y|;xo1Yxu2~HN~@E*7OghArVKm$|&3SiCP z5itkFVLgB<0u{kJhAIKcK@Q+Meoa9}Ame~D`h8I(zmW^(^?(jsbiTqp!|g6H^nn|D z4=Bjtz=-S+D5uCqD1s@H5{eNe0VRmifKr$?DLgV@IP#*%=04jxWm~aPK2{siXdl-` z8|$N$G16x{QH#DY?Za@TUN6PlKw z7R%cW<)!Gla$}^@Z@Rso9L29xZLD+?6me%5faNSSe0ldsVZ$zTW!vufKnM84>+SE0>S{BiuR` zL>c~qa-u>|BB*dEaY(S$q1>gyqr{`ar^Kfspd_Foq$H#wq9meXjgqxywM%)6k`~Dp z9p9kLqYFV&(4fuj@j7Mx!ovN4`&md?M86RC@lQI-m1~r>D8nIb8atR08Mbs5E0gYW zS=S!2LD}YVYGXNd(@t$sw!NI%Tu$x$>+oI5ZY`JHw9ByZwmsnvWp|fT+myM~@9lkH zBzunWi?eh(#iPn(-V02qf`KsV*KLU&lY-ARVjfXi}?me3YK1W&E_7DFhwAeDz&=xMkw?6d(#SEFCamjcfwrF4rc|FHs(OPLXc!O_4*+N(I8gjZ~6F
u_HLL$Ss;{x+GAht|fuvoG5y)cf5Xa}TlsSl=cVK;2JJ{TK?pZgDJFTYb|9uS_ zZ}zZNvm(d=CqmstZ{CX2@mR?*#D3{5>z4Vm9K1jW=)*x)>=#SLilt)9fN8iUU1*lw z4+vzSR)CKS;q`k_6GY;_;B1?BE?;f+sycX8($>RD$-$un6EeBcjM7mpmGOtwtgJ!V zr?O5q($n$alWpBAi`|-Z>#9!kfs%S!m5}!$6|S=ymh#;+9m}ua$%5Cm*m442-GgP` ziS_KTnAH1C-dzIbVv<#00plXGNOYt$qzft=@cvkWca`o<`nwI7f+j@ovD~3!myQ9Q zEyd?hg$G?t}U%CSbaJUxZa%Gg%>W=i1Kc0IIPeh zCQ!z4$c1qGJlEmvO=5KqR2uS`hW+hplfNoX4kx*5p zn=KTP76{Y~9^&qY~!m0U~ZWvxUUxt&pCXRSn&caBK#2hu`S zVktY9^LbH9&Y6=4lzPqfX7QN&(R9p%$;D+DTy=ve@TWn{Z-d7zC|6(mmd_jdfKnk< zbzU?|WVu+2iu!e{P$Ip)3q|s)nvj+v@uK^X>Y?vNBk5CJ&5P`Kwdvf`Wu3OAJkxIi Lw6*M#L)#`_U=dVl literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app.db new file mode 100644 index 0000000000000000000000000000000000000000..d1f1fbe1160bf5548f01ac79a7cdbc50f9b97d4f GIT binary patch literal 3072 zcmeHGJxfC|6uo&j+7ECmbZ}@k6>1m%K&!m1i*3QNq-|_N-+L)(p7?O;=IGz>r*w65 zadB~RaT6R&N-GtF>LL_!;hcLp_XBbu?enHIf?X;dbHh%60wGXm3;;?NxCF5|XF)Ai z;j~Rrg5&qwJv&7(1x#_iX~Fls16$z$e!yM1QX#V$CAmd$VR$bR{d8(nEcEoN2+mqz zqZ6`D;UdBZfk=iIy?f85@hNY9~}Y;Yr4fxHc?N z7HJe&UBp~Q-__!g`LZL?Igr*p)**-kVdy1Bo-R>d>w zgXQL;YpePxUtXLe`1 mq0UrH17a!bwzg76{lW4E7u2*y%{v(kvSk1D^bPzHj8RcqyZAvdySSIycw z<=D;LSQdYX%rPyCQ}oU-32)UZh8vj>Rb910j8rDqbN6k`p(CDiumAl_FRnBwvhMdv_!3WNSO6J(rj1EBVTa z7vR8&@usB}R`TVWKhHO#?9FCna{K$s5druKk4}PoA7A?wLEu9`0cZl0010*kDgqq? zjX@_slgS%{Nr z)4K2lV?EcBF<&yK2QjL^E5Ze`PFcZtozGN#EwzlUii Zwu?SryqdQ18h<^oVF7cpN9JT6{RKU0nQQ<6 literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db2556a5bfea00e94b5b70e437691fa862ade647 GIT binary patch literal 789 zcmY*WO>fgc5S{fVPCpV+^#B(RKE|ljhn5?nps0tSkg7>PP%e>UZ(2uoHq5SDQYEKy z=XdazeC5PnKpdEHN=a9q=iTSo=b1Op8;z|uSAQ-)IRHOlZP6LtQ6`yIHSTD;*ttE?R_Tf`?7oIhO^mzJi0q} zUNh3!ES%2wJe7q>>U$R-I_JlIuX(iR9r=E>kmgHT)FM5ds>l{@l%vsD)YMlMy=!qFO2ylI{@X_ydsJ`+X6d8~SB{`Z}=~UR{Sb;WTJzQdA~rpLD{}1Jcd} zX*hb_KkYoeiR5!)RX{BTnT}Oz_Gk0rSu!PEJN(xa`)Rfaz}Xdb;ffuB4LU_k@sbpq z6fFw#k>H8php=2RrNcuqoW@aFyA*8rq{`;gXeMqs5eFU|rx84H{Dn~|dFH+H#;CLZ zp8GZA(Ib~JkUf1n*hYOj9EXwBI7coYs|3ZySlQ@0OjBPX*Nfa#;i58mYD-U7P-l7< zmBmEes7D_RH@#*=UAz>yL!4h3)M%>YRNicmtIPW4 EUxrAuQ2+n{ literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/__pycache__/views.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0b5aa206b1785d37c7ee459a595fe2c82545af7 GIT binary patch literal 1132 zcmZWo%}yIJ5FYPOk_}lBqL!*E_i7JiPu!}i5^7N;6j}v@v=_9A4cT;^O~+1JA~?}U z=u7ZQzV^f`pdLDQNQ$Vn9*;e<<8QthZ^v zG*IvY#Za3%if=QaGB&;iTjiELALM3OOB?(dO-a^VW_J8B53(_h*#?FNXya$=frywVMGYB?mRCGZdt7+ zXKFT(1=Vm^$!R{hGyxfM6AGCZCDyEayOXlvR} zs%HF{p_E>U(d^f!|w1BkHnc z&e4hjML1n1T@)G%G5^<2YMBSaZHoOAeTNr{di`>p`Ac$AHWCo@h~W#;dP!`;^D`Ro9dYWgYs!K2D7IQ1C+_K0YBYgK8(LY9lLuj~}_BBYCy zwud;U#+lTiEQ)YUj%`pZBi6y!T5jNp199WCQtT3pwY1Yfy#Bas v?ssxRXTc*HeO$@JJvvyY2fyZPGu-(rxz>s=N8H<^iOFr;-LxLuJ=J%? z-{vpTAE4iCP7lE+4ViBzlbtU!-)zF~*RFo~`t4NG;tH@nf!RBN5pF>h(OW^IfIh(q zXcT%U1@rxKhcf{I~|&huK4bBPx+B=u*(@QxMUAx=@jt2cl_9D*#hJz(B6JEM2@0oaF88GN9pm)NVeALS{WO~QrAsB znQp5(FRHER_0tz82ZJcy+uqxXSGg!AvmYvV1*_DPiIUDSwQP;m#)s8MC0nPuu&(RE z`Cb<(p5HN-|Ar?7QMa}x#tZUb@54(@Eb2;{+?*%Rlzs1Xlhk^oDtphhPMadH5_GkQ z?KD$&16jocS#J2NFJCijOJY;>#VsM(=O|ac53?!Y55XVOyo-2+hY%d&@Y2o&3tq0W z_!v#u^AqvYd4AZ*jxqd2_S^g+RY9@nZZtN!UJ4(xoEeNV0q|mE`oeAC!RU+OIG1R4 zn(;x&xNyhqjFppTc~$udXP$z?UU;KyTRAVJhksOa6MRNFQ>b(GTTi==sO?9 + + {% if title %} + {{ title }} - ACME + {% else %} + Welcome to ACME Aircraft Parts + {% endif %} + + + + + {% block content %}{% endblock %} + + diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html new file mode 100755 index 0000000..36c49b4 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/customer.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Home +
+

Add Customer to Our Database

+
+ {{ form.hidden_tag() }} +
+
+ +

Company name:
+ {{ form.company(size=120) }}
+

+

Customer email:
+ {{ form.email(size=120) }}
+

+
+
+
+ +
+

+
+
+
+{% endblock %} diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html new file mode 100755 index 0000000..8f06a97 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/templates/home.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Welcome to ACME Aircraft Parts

+ +
+
+

These are all of our awesome customers:

+ + + + + + + + + + {% for customer in customers %} + + + + + {% endfor %} + +
CompanyEmail
{{ customer['company']}} {{ customer['email']}}
+
+
+
+{% endblock %} diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py new file mode 100755 index 0000000..da7cde1 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.py @@ -0,0 +1,30 @@ +from flask import render_template, redirect, request +from app import app, models, db +from .forms import CustomerForm +# Access the models file to use SQL functions + + +@app.route('/') +def index(): + return redirect('/create_customer') + + +@app.route('/create_customer', methods=['GET', 'POST']) +def create_customer(): + form = CustomerForm() + if form.validate_on_submit(): + # Get data from the form + # Send data from form to Database + company = form.company.data + email = form.email.data + models.insert_customer(company, email) + return redirect('/customers') + return render_template('customer.html', form=form) + + +@app.route('/customers') +def display_customer(): + # Retreive data from database to display + customers = models.retrieve_customers() + return render_template('home.html', + customers=customers) diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/app/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38f8e5c49f893bb7fa6664626a44f2263ccb9df8 GIT binary patch literal 1350 zcmbtU&2G~`5T3P@G;x!*{Bx){aj=l6c>sivS}3Q0oFF7$DmS~OZoRSD-2^JNr}8vB z5Dx+m0N436; zbVyl9f^z|t9nu}jV7rucN%tu0As3SDP`O6BPg%cN+oiHgQ`Mo90m&X+3X*H|mDtH5 zx{CKnA{&uhr;h+PD6-@DPqha@*?5^tg0;uk(~2+wW87&Vv595|)xGIz@L zeM}Zc&752FlTQm}U9*F?<#p|P7DabqvD(tEuZ?eD`)T z_5E;=1HPXr9Q1QZbU}1ZbRyU{d)^P|B%}-BeGm;lAXIXW2-plr09^=*k-)W(4}^j< z!1E;L8^#{4q=m%V5rXY(=h*4eS9ZkEGn*-s zMB)YtGhV>LSds7ulRrt=e*^geSRmTM8Dh!U4q%U=)&@JCwP;!|MUS0P&J=2SEk)a4 zz*nYsVg9#smb)x0-ompL*7p#z%ptel6$3Gj8E#L|QJLFQUqizPt2gC_Qbr(UX*cVj z1KVhTW2Ra-m2#8m9X9u2u1ojczcI&UKF8a(DAfxF#q$5aw%8V1A_^aN9!I|csD2q* literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py new file mode 100755 index 0000000..bbbb224 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.py @@ -0,0 +1,9 @@ +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + +# Will be used for ORM Lab +# SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') +# SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') + +WTF_CSRF_ENABLED = True +SECRET_KEY = 'you-will-never-guess' diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc b/Labs/lab-SQL/lab-SQL/Lab-SQLite/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59af7fd032bca1841f4a4337b62a884ff9163960 GIT binary patch literal 491 zcmZ8dO;5r=5Sle>F@C7MWyOyRv=?R>mFjN#`L>Aj#UXQToW4MG4900HJ2%=N8N04%~r%f#D(;1@3e zl3Rd{4h^rojs8X{K?kn_xC>qtf*tVovIb7GM9st}oq?=o&0j*H@YFO-nK6DGp9CXS z&we!G3C58WDoWP!fRJ^R8m}S@jU}!yF{UX>*{l(vbW)L2*+j9gW~xkvKa#(8Ad;oO zKvf}}^N9$N^E_zeOC&PSoJV4*8WiE&_pDy)n)RP}+j6Z-%VB(IcmH$!?v-u1jN9z) zHZR~NDXM)c@aT4U%dtD04Xn!^YpZNhhqY|x@*DQlBoF?SG{`lF5)*00ezG##D4$gn sn~NyGP#P+w4G2Fp$I)^krYG?_pW}?^G{kd_vh!8ev}659JJd_s7uKI~bpQYW literal 0 HcmV?d00001 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt b/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt new file mode 100755 index 0000000..bfbaf81 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/requirements.txt @@ -0,0 +1,10 @@ +Flask==0.10.1 +Flask-SQLAlchemy==2.1 +Flask-WTF==0.12 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +SQLAlchemy==1.0.12 +Werkzeug==0.11.4 +wheel==0.29.0 +WTForms==2.1 diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py b/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py new file mode 100755 index 0000000..5d2f714 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/run.py @@ -0,0 +1,2 @@ +from app import app +app.run(debug=True, host="0.0.0.0", port=8081) diff --git a/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql b/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql new file mode 100644 index 0000000..aa10b84 --- /dev/null +++ b/Labs/lab-SQL/lab-SQL/Lab-SQLite/schema.sql @@ -0,0 +1,8 @@ +-- Insert code to create Database Schema +-- This will create your .db database file for use +drop table if exists customers; +create table customers ( + customer_id integer primary key, + company text not null, + email text not null +); diff --git a/Labs/lab-SQL/lab-SQL/Pokemon.db b/Labs/lab-SQL/lab-SQL/Pokemon.db new file mode 100644 index 0000000000000000000000000000000000000000..0dd44fa9f56a01bc03c74ed614c8d9714627a3fd GIT binary patch literal 9216 zcmeHN&2Jk;6rY*r{c>VL^HIx+Rt&iiD@j|ykqc?MsRD^p97ky`*c*G2E?)0CyK79u z1-DX_KcEugU*Lemt;ZfBHJ3_UkT@X3iE@BLQ8{p9#_OSW(uAslHY&TyWXAL6CqxUF92#xV%@I-paLEKZr zKjIZ^$sV1Wu4OM?#5dcKz2&l|UuO;9E4zNxjvU_$k5#A(MQgrf(bD|oWs4pY(`lzh z9WP=#ETGN6Y1qLYt+PGq`4RP6t~;BSW0yUf=d~d%o6X|RXI*nzAq&FpKYc*$sczjAolYASr&ckR3MK2RRiuU05-qGR zFVkzqrIq>OCjG$Lr1R^g)ujUOzhV_iv%H7UyJD2A>%4KVgQy;`E0(A89aqz`b94CC z&;Y(wyBW0tR+Bc!`5D@VnZ=hRr3TYj3MLT@?A3G&6&qP29jAfTA8$bs^-Xf0Yr ztFU0L(Jq*L-Sgbsk5nydn)ud8zq#^T6e%>q`2v~Sx_+w z>nm1qY2oj+qgSlO`Ss-zef!d-emtVR=Fw$N=dTepJ2QhfyXJ+vF5kN4knOgZS7k>& z!ho?ygwsOTS>7|>+lgW?i@h#V{9Wz|k}N?WLE!8nplc~Kfmq;Fbybv_cJN6$l|nhx z4EPyZPlG7eY|mk?PDG2U9r!wyZ8Pu#0yrS>I~>46`10&pnrN0F@IOKzufqn8kL|6% zZwnVHVB**=SADnD@X8)*m%Dy|Hm<-NmTrdh*5b@cn;5gRkHY`~siD$M66);0jzg zYlbKKBnZ501jY>oWr@jMXxB%F%w^Sxd*0`C1?9*@!`|V16FS^>0(MU04RMauZBAk} zeJAw2F-5e>)$MxAv&l?c38N`qi*s$pYA(yhmE%M~Cdr1oEhmUvhQ4dt5ep`;g5D$( z)f+aa>bx53%@jjoWJm@bo>vt#NzA5Gx2rc=b|AdV}P)TJDw|+N}WJkLSv8 z8HPuQ|0Pd?K!U)ljzEU{04Bc7f;#_o*aNZu6|{@sYw|#F^Ss!5{v&R_vpF17{&qh{ z`|nf!vvhzFKf?5%O7y2s;`sx%&G<_g=UQd|us;rvPx$|*Ml2+4e=N|^&vz&M|4ZTj zGjI>7aGURc_yT_A48U!;FMk1&JV78q;6)%XBDniW!QB^Gt?m1@2|?ArC8+u}+oOwt z?Nyzy>c1{{dsDQN2RPSG%ng9R* literal 0 HcmV?d00001 From e20daf2cf58e9c045d428b4018607a197769b5ba Mon Sep 17 00:00:00 2001 From: Rohit Raghavan Date: Thu, 27 Oct 2016 04:49:17 -0700 Subject: [PATCH 3/3] Rohit and Mudit HW7 --- .../HW7 - Mega Lab Travel App/Untitled.rtf | 8 + .../__pycache__/config.cpython-35.pyc | Bin 0 -> 332 bytes Assignment/HW7 - Mega Lab Travel App/app.db | Bin 0 -> 20480 bytes .../HW7 - Mega Lab Travel App/app/__init__.py | 8 + .../app/__init__.pyc | Bin 0 -> 423 bytes .../app/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 416 bytes .../app/__pycache__/forms.cpython-35.pyc | Bin 0 -> 1282 bytes .../app/__pycache__/models.cpython-35.pyc | Bin 0 -> 2131 bytes .../app/__pycache__/views.cpython-35.pyc | Bin 0 -> 3836 bytes .../HW7 - Mega Lab Travel App/app/forms.py | 29 ++++ .../HW7 - Mega Lab Travel App/app/forms.pyc | Bin 0 -> 718 bytes .../HW7 - Mega Lab Travel App/app/models.py | 64 ++++++++ .../HW7 - Mega Lab Travel App/app/models.pyc | Bin 0 -> 912 bytes .../app/static/main.js | 21 +++ .../app/templates/base.html | 17 +++ .../app/templates/home.html | 39 +++++ .../app/templates/login.html | 29 ++++ .../app/templates/signup.html | 26 ++++ .../app/templates/trip.html | 37 +++++ .../HW7 - Mega Lab Travel App/app/views.py | 138 ++++++++++++++++++ .../HW7 - Mega Lab Travel App/app/views.pyc | Bin 0 -> 1350 bytes .../HW7 - Mega Lab Travel App/config.py | 9 ++ .../HW7 - Mega Lab Travel App/config.pyc | Bin 0 -> 491 bytes .../requirements.txt | 10 ++ Assignment/HW7 - Mega Lab Travel App/run.py | 2 + .../HW7 - Mega Lab Travel App/schema.sql | 15 ++ 26 files changed, 452 insertions(+) create mode 100644 Assignment/HW7 - Mega Lab Travel App/Untitled.rtf create mode 100644 Assignment/HW7 - Mega Lab Travel App/__pycache__/config.cpython-35.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app.db create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/__init__.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/__init__.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/__pycache__/__init__.cpython-35.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/__pycache__/forms.cpython-35.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/__pycache__/models.cpython-35.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/__pycache__/views.cpython-35.pyc create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/forms.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/forms.pyc create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/models.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/models.pyc create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/static/main.js create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/templates/base.html create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/templates/home.html create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/templates/login.html create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/templates/signup.html create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/templates/trip.html create mode 100755 Assignment/HW7 - Mega Lab Travel App/app/views.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/app/views.pyc create mode 100755 Assignment/HW7 - Mega Lab Travel App/config.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/config.pyc create mode 100755 Assignment/HW7 - Mega Lab Travel App/requirements.txt create mode 100755 Assignment/HW7 - Mega Lab Travel App/run.py create mode 100644 Assignment/HW7 - Mega Lab Travel App/schema.sql diff --git a/Assignment/HW7 - Mega Lab Travel App/Untitled.rtf b/Assignment/HW7 - Mega Lab Travel App/Untitled.rtf new file mode 100644 index 0000000..5be5d02 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/Untitled.rtf @@ -0,0 +1,8 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1504 +{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} +{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;} +{\*\expandedcolortbl;\csgray\c100000;\csgray\c0;\csgray\c100000;} +\margl1440\margr1440\vieww10800\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f0\fs22 \cf2 \cb3 \CocoaLigature0 sqlite3 app.db < schema.sql} diff --git a/Assignment/HW7 - Mega Lab Travel App/__pycache__/config.cpython-35.pyc b/Assignment/HW7 - Mega Lab Travel App/__pycache__/config.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..584b99fb8cc7c0ec3d371c7f44f93b96690566df GIT binary patch literal 332 zcmYk2%}T>i5QQgAOhU1sATA{3>9}YEuclcMj^5?4QL?KbqAP0y55MZgnvh!zjKm%U2 zjiN0`IuMzV=nz?($gFRCs60%9m%VjSyU$sky8;`OZdxNz-)=hvwMNOSMQibxeoT@{ z!B^PYjLowg8H=o#6RL5v69ywToJ~i}pA0U>{$<;p`NOFnup9sJ4WzBEed9Cq?g=G% zvRGu5p ZqjKHar>i2Vb39W&12Pr1wFA@Cz5pfpSTX`($^XAA6Z0JABf&g;BFKi*=zo>iN?=g{y_se@?^SsIEhX4d1009U< z00Izz00bZaf&WQhcdb^JQhKj@g?=_SMP|2i$|}7m?2bY;>fY~%in`Qlvr$$iiH?mL zg-=K7ar9u&jmGL>IKID$qXxMelGHa4)`*?N~ZiG?zs22{^A~#vSTIO`O z*6Gx>zfNtoTJ@S-mmagp)a>Lh=Wb6u(TgIb_Jr0tX;V=hS17#Qs}vqRl`{Xg@TjW{ z?{qU_oU@^5tTxNmino;_~7Fn4!T})gYGI1!ri0|U# z

e0ga8B}009U<00Izz00bZa0SG|gSfIhBx23a1Qda0VfR{Bo3GkP=Y|tS@)FB?2EUsg8&2|009U<00Izz00bZa0SG|gA_Q*pYR7#IF>)U{sC1^Zn%kKvY;0}~ ztd1@1=4m5;!>`JlQf`^&I`8XTQH4fm@9)-r{hE}Usn#x0KmE2Tj@qW$e tXF>o15P$##AOHafKmY;|fB*y_@UH@rcf2!>4CoI4bTHtTcdidN_)o)E%P{}| literal 0 HcmV?d00001 diff --git a/Assignment/HW7 - Mega Lab Travel App/app/__init__.py b/Assignment/HW7 - Mega Lab Travel App/app/__init__.py new file mode 100755 index 0000000..353d3af --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/__init__.py @@ -0,0 +1,8 @@ +from flask import Flask +from flask.ext.sqlalchemy import SQLAlchemy + +app = Flask(__name__) +app.config.from_object('config') +db = SQLAlchemy(app) + +from app import views, models diff --git a/Assignment/HW7 - Mega Lab Travel App/app/__init__.pyc b/Assignment/HW7 - Mega Lab Travel App/app/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7773f192b1801c21f289d75595f71459c5f2f130 GIT binary patch literal 423 zcmYjMJx{|h5IyIkw4q2H_z_u123CYXLY)v2sbI)r<>LZL?Igr*p)**-kVdy1Bo-R>d>w zgXQL;YpePxUtXLe`1 mq0UrH17a!bwzg76{lW4E7u2*z)BOhu+B1qtbzb)89DldigFzs5iCTl(sg zzu=QMQw+I>lXG(KN%n_Bzi4(JJ^wh`OPOwaZkm4pF0Th9l0I_EWqyx%@*aad8 zhz`7=NkLFpd9d1n)U^r`u9d9U-OlNNq@a2b_dxj&`#6olEcCuG2SU=)Gs(>p5`T6x zoyhr8s7>q5%VLpdq0`bP7cZvuRGA8CuEKsy7q&s$2giF`J{GU_*gQ-A+pS%++Ad=S zSAwzDDkuxA8GH`wXLy%^A literal 0 HcmV?d00001 diff --git a/Assignment/HW7 - Mega Lab Travel App/app/__pycache__/forms.cpython-35.pyc b/Assignment/HW7 - Mega Lab Travel App/app/__pycache__/forms.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d638a919a8007a9b2e62f424bb010e40680da90c GIT binary patch literal 1282 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 literal 0 HcmV?d00001 diff --git a/Assignment/HW7 - Mega Lab Travel App/app/forms.py b/Assignment/HW7 - Mega Lab Travel App/app/forms.py new file mode 100755 index 0000000..85b6016 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/forms.py @@ -0,0 +1,29 @@ +from flask.ext.wtf import Form +from wtforms import StringField, SelectField +from wtforms.validators import DataRequired + + +class TripForm(Form): + ''' + Add trip input form fields + ''' + name_of_trip = StringField('name_of_trip', validators=[DataRequired()]) + destination = StringField('destination', validators=[DataRequired()]) + friend2 = SelectField('friend2', validators=[DataRequired()]) + + +class SignupForm(Form): + ''' + Add user input form fields + ''' + user_name = StringField('user_name', validators=[DataRequired()]) + password = StringField('password', validators=[DataRequired()]) + + +class LoginForm(Form): + ''' + Login form fields + ''' + user_name = StringField('user_name', validators=[DataRequired()]) + password = StringField('password', validators=[DataRequired()]) + diff --git a/Assignment/HW7 - Mega Lab Travel App/app/forms.pyc b/Assignment/HW7 - Mega Lab Travel App/app/forms.pyc new file mode 100644 index 0000000000000000000000000000000000000000..669b7b78bc49f237a48450483f413c58acf2e047 GIT binary patch literal 718 zcmb_Zu};G<5IrYtS_%~v1L701kgy;zAcUY)Vqr)H5?O-PxFxFHg!o$MTz-=8U}J&1 zq(IrR;+MSho$tMi``+ygKHly|uwE{`&uQBSf|MQs8o&sM1qkL2Xa|f7u?waFaifm9 zpqpSkh`pLOK)1lOA#M|If)X$mkb3Y6umZS`w;*l7&~H`Ro9dYWgYs!K2D7IQ1C+_K0YBYgK8(LY9lLuj~}_BBYCy zwud;U#+lTiEQ)YUj%`pZBi6y!T5jNp199WCQtT3pwY1Yfy#Bas v?ssxRXTc*HeO$@JJvvyY2fyZPGu-(rxz>s=N8H<^iOFr;-LxLuJ=J%? z-{vpTAE4iCP7lE+4ViBzlbtU!-)zF~*RFo~`t4NG;tH@nf!RBN5pF>h(OW^IfIh(q zXcT%U1@rxKhcf{I~|&huK4bBPx+B=u*(@QxMUAx=@jt2cl_9D*#hJz(B6JEM2@0oaF88GN9pm)NVeALS{WO~QrAsB znQp5(FRHER_0tz82ZJcy+uqxXSGg!AvmYvV1*_DPiIUDSwQP;m#)s8MC0nPuu&(RE z`Cb<(p5HN-|Ar?7QMa}x#tZUb@54(@Eb2;{+?*%Rlzs1Xlhk^oDtphhPMadH5_GkQ z?KD$&16jocS#J2NFJCijOJY;>#VsM(=O|ac53?!Y55XVOyo-2+hY%d&@Y2o&3tq0W z_!v#u^AqvYd4AZ*jxqd2_S^g+RY9@nZZtN!UJ4(xoEeNV0q|mE`oeAC!RU+OIG1R4 zn(;x&xNyhqjFppTc~$udXP$z?UU;KyTRAVJhksOa6MRNFQ>b(GTTi==sO?9 + + {% if title %} + {{ title }} - Travel App + {% else %} + Welcome to IO Lab Travel App + {% endif %} + + + + + {% block content %}{% endblock %} + + + + + diff --git a/Assignment/HW7 - Mega Lab Travel App/app/templates/home.html b/Assignment/HW7 - Mega Lab Travel App/app/templates/home.html new file mode 100755 index 0000000..222c0bd --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/templates/home.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% block content %} +

+
+

Welcome to MegaLab Travel App

+
+ Create a Trip + | + Logged in as: {{ user }} + Logout +
+
+
+

You have the below trips

+ + + + + + + + + + + {% for trip in trips %} + + + + + + + + {% endfor %} + +
Trip NameDestinationFriend 1Friend 2
{{ trip['trip_name']}} {{ trip['destination']}} {{ trip['friend1']}} {{ trip['friend2']}}
+
+
+
+{% endblock %} diff --git a/Assignment/HW7 - Mega Lab Travel App/app/templates/login.html b/Assignment/HW7 - Mega Lab Travel App/app/templates/login.html new file mode 100755 index 0000000..3b1ddf0 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/templates/login.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Signup +
+

Login

+ +
+ {{ form.hidden_tag() }} + +
+
+

+ User Name:
+ {{ form.user_name(size=120) }}
+

+

+ Password:
+ {{ form.password(size=120) }}
+

+
+

+
+ +
+
+{% endblock %} diff --git a/Assignment/HW7 - Mega Lab Travel App/app/templates/signup.html b/Assignment/HW7 - Mega Lab Travel App/app/templates/signup.html new file mode 100755 index 0000000..369b29a --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/templates/signup.html @@ -0,0 +1,26 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Create a User

+ +
+ {{ form.hidden_tag() }} + +
+
+

+ User Name:
+ {{ form.user_name(size=120) }}
+

+

+ Password:
+ {{ form.password(size=120) }}
+

+
+

+
+ +
+
+{% endblock %} diff --git a/Assignment/HW7 - Mega Lab Travel App/app/templates/trip.html b/Assignment/HW7 - Mega Lab Travel App/app/templates/trip.html new file mode 100755 index 0000000..a90d9ab --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/templates/trip.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Logged in as: {{ user }} + Logout +
+
+

Create a Trip

+ + + +
+ {{ form.hidden_tag() }} + +
+
+

+

Name of Trip:
+
{{ form.name_of_trip(size=120) }}
+

+

+

Destination:
+
{{ form.destination(size=120) }}
+

+

+

Friend you're going with:
+
{{ form.friend2() }}
+

+
+

+ +
+
+
+{% endblock %} diff --git a/Assignment/HW7 - Mega Lab Travel App/app/views.py b/Assignment/HW7 - Mega Lab Travel App/app/views.py new file mode 100755 index 0000000..73033ab --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/app/views.py @@ -0,0 +1,138 @@ +from flask import render_template, redirect, request, session, escape, json +from app import app, models, db +from .forms import * +from .models import * + + +@app.route('/') +@app.route('/home', methods=['GET', 'POST']) +def display_trips(): + ''' + Displays trips for the logged in user + ''' + current_user = "" + if 'username' in session: + current_user = escape(session['username']) + trips = retrieve_trip_data(current_user) + return render_template('home.html', trips=trips, user=current_user) + else: + return redirect('login') + + +def retrieve_trip_data(current_user): + trips = [] + trip_rows = models.retrieve_trips() + for trip_row in trip_rows: + if trip_row['friend1'] == current_user or trip_row['friend2'] == current_user: + trips.append(trip_row) + return trips + + +@app.route('/login', methods=['GET', 'POST']) +def login(): + ''' + Authenticates and logs in user + ''' + login_form = LoginForm() + if login_form.validate_on_submit(): + # Get data from the form + user_name = login_form.user_name.data + password = login_form.password.data + # Authenticate user + if authenticate_user(user_name, password): + session['username'] = user_name + return redirect('home') + else: + return redirect('login') + + return render_template('login.html', form=login_form) + + +def authenticate_user(user_name, password): + ''' + Retrieves users from db to authenticate attempted login + ''' + user_rows = models.retrieve_users() + for user_row in user_rows: + if user_row['user_name'] == user_name and user_row['password'] == password: + return True + return False + + +@app.route('/logout', methods=['GET', 'POST']) +def logout(): + session.pop('username') + return redirect('login') + + +@app.route('/create_user', methods=['GET', 'POST']) +def create_user(): + ''' + Creates a new user entry in db + ''' + signup_form = SignupForm() + if signup_form.validate_on_submit(): + # Get data from the form + user_name = signup_form.user_name.data + password = signup_form.password.data + # Send data from form to Database + models.create_user(user_name, password) + return redirect('login') + + return render_template('signup.html', form=signup_form) + + +@app.route('/create_trip', methods=['GET', 'POST']) +def create_trip(): + ''' + Creates a new trip entry in db + ''' + if 'username' in session: + current_user = escape(session['username']) + trip_form = TripForm() + trip_form.friend2.choices = retrieve_users() + if trip_form.validate_on_submit(): + # Get data from the form + name_of_trip = trip_form.name_of_trip.data + destination = trip_form.destination.data + friend2 = trip_form.friend2.data + + # Send data from form to Database + models.create_trip(name_of_trip, destination, + current_user, friend2) + return redirect('home') + + return render_template('trip.html', form=trip_form, user=current_user) + + else: + return redirect('login') + + +def retrieve_users(): + ''' + Retrieves users from db to display in Friends dropdown in Create User page. + Remove currently logged in user from the list + ''' + user_rows = models.retrieve_users() + users = [] + current_user = "" + if 'username' in session: + current_user = escape(session['username']) + for user_row in user_rows: + if user_row['user_name'] == current_user: + continue + users.append(user_row['user_name']) + + return [(user, user) for user in users] + + +@app.route('/delete_trip', methods=['GET', 'POST']) +def delete_trip(): + ''' + Deletes trip row from the db + ''' + print("Invoked!") + responseJson = request.get_json(force=True) + models.delete_trip(responseJson['tripName'].strip()) + + return json.dumps({'status': 'OK'}) diff --git a/Assignment/HW7 - Mega Lab Travel App/app/views.pyc b/Assignment/HW7 - Mega Lab Travel App/app/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38f8e5c49f893bb7fa6664626a44f2263ccb9df8 GIT binary patch literal 1350 zcmbtU&2G~`5T3P@G;x!*{Bx){aj=l6c>sivS}3Q0oFF7$DmS~OZoRSD-2^JNr}8vB z5Dx+m0N436; zbVyl9f^z|t9nu}jV7rucN%tu0As3SDP`O6BPg%cN+oiHgQ`Mo90m&X+3X*H|mDtH5 zx{CKnA{&uhr;h+PD6-@DPqha@*?5^tg0;uk(~2+wW87&Vv595|)xGIz@L zeM}Zc&752FlTQm}U9*F?<#p|P7DabqvD(tEuZ?eD`)T z_5E;=1HPXr9Q1QZbU}1ZbRyU{d)^P|B%}-BeGm;lAXIXW2-plr09^=*k-)W(4}^j< z!1E;L8^#{4q=m%V5rXY(=h*4eS9ZkEGn*-s zMB)YtGhV>LSds7ulRrt=e*^geSRmTM8Dh!U4q%U=)&@JCwP;!|MUS0P&J=2SEk)a4 zz*nYsVg9#smb)x0-ompL*7p#z%ptel6$3Gj8E#L|QJLFQUqizPt2gC_Qbr(UX*cVj z1KVhTW2Ra-m2#8m9X9u2u1ojczcI&UKF8a(DAfxF#q$5aw%8V1A_^aN9!I|csD2q* literal 0 HcmV?d00001 diff --git a/Assignment/HW7 - Mega Lab Travel App/config.py b/Assignment/HW7 - Mega Lab Travel App/config.py new file mode 100755 index 0000000..bbbb224 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/config.py @@ -0,0 +1,9 @@ +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + +# Will be used for ORM Lab +# SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') +# SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') + +WTF_CSRF_ENABLED = True +SECRET_KEY = 'you-will-never-guess' diff --git a/Assignment/HW7 - Mega Lab Travel App/config.pyc b/Assignment/HW7 - Mega Lab Travel App/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59af7fd032bca1841f4a4337b62a884ff9163960 GIT binary patch literal 491 zcmZ8dO;5r=5Sle>F@C7MWyOyRv=?R>mFjN#`L>Aj#UXQToW4MG4900HJ2%=N8N04%~r%f#D(;1@3e zl3Rd{4h^rojs8X{K?kn_xC>qtf*tVovIb7GM9st}oq?=o&0j*H@YFO-nK6DGp9CXS z&we!G3C58WDoWP!fRJ^R8m}S@jU}!yF{UX>*{l(vbW)L2*+j9gW~xkvKa#(8Ad;oO zKvf}}^N9$N^E_zeOC&PSoJV4*8WiE&_pDy)n)RP}+j6Z-%VB(IcmH$!?v-u1jN9z) zHZR~NDXM)c@aT4U%dtD04Xn!^YpZNhhqY|x@*DQlBoF?SG{`lF5)*00ezG##D4$gn sn~NyGP#P+w4G2Fp$I)^krYG?_pW}?^G{kd_vh!8ev}659JJd_s7uKI~bpQYW literal 0 HcmV?d00001 diff --git a/Assignment/HW7 - Mega Lab Travel App/requirements.txt b/Assignment/HW7 - Mega Lab Travel App/requirements.txt new file mode 100755 index 0000000..bfbaf81 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/requirements.txt @@ -0,0 +1,10 @@ +Flask==0.10.1 +Flask-SQLAlchemy==2.1 +Flask-WTF==0.12 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +SQLAlchemy==1.0.12 +Werkzeug==0.11.4 +wheel==0.29.0 +WTForms==2.1 diff --git a/Assignment/HW7 - Mega Lab Travel App/run.py b/Assignment/HW7 - Mega Lab Travel App/run.py new file mode 100755 index 0000000..5d2f714 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/run.py @@ -0,0 +1,2 @@ +from app import app +app.run(debug=True, host="0.0.0.0", port=8081) diff --git a/Assignment/HW7 - Mega Lab Travel App/schema.sql b/Assignment/HW7 - Mega Lab Travel App/schema.sql new file mode 100644 index 0000000..88e68d8 --- /dev/null +++ b/Assignment/HW7 - Mega Lab Travel App/schema.sql @@ -0,0 +1,15 @@ +-- Insert code to create Database Schema +-- This will create your .db database file for use +DROP TABLE IF EXISTS users; +CREATE TABLE users ( + user_name TEXT PRIMARY KEY, + password TEXT +); + +DROP TABLE IF EXISTS trips; +CREATE TABLE trips ( + trip_name TEXT PRIMARY KEY, + destination TEXT, + friend1 TEXT REFERENCES users(user_name), + friend2 TEXT REFERENCES users(user_name) +); \ No newline at end of file