├── 01-PuttingTheBasicsInPlace ├── 02-create_the_flask_application │ ├── .gitignore │ ├── app.py │ ├── env_sample.py │ └── requirements.txt ├── 03-deploy_the_application_to_heroku │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ └── requirements.txt ├── 04-connect_flask_to_mongodb │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ └── templates │ │ └── tasks.html ├── 05-template_inheritance │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ └── templates │ │ ├── base.html │ │ └── tasks.html └── 06-materialize_and_static_files_setup │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── base.html │ └── tasks.html ├── 02-UserAuthenticationAndAuthorization ├── 01-adding_a_nav_bar │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ └── tasks.html ├── 02-register_page │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── register.html │ │ └── tasks.html ├── 03-register_functionality │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── register.html │ │ └── tasks.html ├── 04-login_functionality │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── login.html │ │ ├── register.html │ │ └── tasks.html ├── 05-display_user_profile_page │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html └── 06-logout_functionality │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── base.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html ├── 03-AddingATask-AcceptingUserInput ├── 01-accordion_setup │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 02-accordion_task_data_binding │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 04-add_task_form_boilerplate │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 05-add_task_form_input_fields │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html └── 06-allow_task_category_selection │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── add_task.html │ ├── base.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html ├── 04-AddingATask-WritingToTheDatabase ├── 01-submit_add_task_form_data │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html └── 02-materialize-select-validation │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── add_task.html │ ├── base.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html ├── 05-EditingATask ├── 01-adding_edit_and_done_task_buttons │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 02-wire_up_task-edit_button │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── edit_task.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 03-bind_data_to_edit_task_form │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── edit_task.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html └── 04-update_task_in_the_database │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── add_task.html │ ├── base.html │ ├── edit_task.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html ├── 06-DeleteATask └── 01-delete_task │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── add_task.html │ ├── base.html │ ├── edit_task.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html ├── 07-ManageCategories ├── 01-display_categories │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_task.html │ │ ├── base.html │ │ ├── categories.html │ │ ├── edit_task.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 02-add_category │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_category.html │ │ ├── add_task.html │ │ ├── base.html │ │ ├── categories.html │ │ ├── edit_task.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html ├── 03-update_category │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ │ ├── css │ │ │ └── style.css │ │ └── js │ │ │ └── script.js │ └── templates │ │ ├── add_category.html │ │ ├── add_task.html │ │ ├── base.html │ │ ├── categories.html │ │ ├── edit_category.html │ │ ├── edit_task.html │ │ ├── login.html │ │ ├── profile.html │ │ ├── register.html │ │ └── tasks.html └── 04-delete_category │ ├── .gitignore │ ├── Procfile │ ├── app.py │ ├── env_sample.py │ ├── requirements.txt │ ├── static │ ├── css │ │ └── style.css │ └── js │ │ └── script.js │ └── templates │ ├── add_category.html │ ├── add_task.html │ ├── base.html │ ├── categories.html │ ├── edit_category.html │ ├── edit_task.html │ ├── login.html │ ├── profile.html │ ├── register.html │ └── tasks.html └── 08-SearchingWithinTheDatabase └── 01-text_index_searching ├── .gitignore ├── Procfile ├── app.py ├── env_sample.py ├── requirements.txt ├── static ├── css │ └── style.css └── js │ └── script.js ├── templates ├── add_category.html ├── add_task.html ├── base.html ├── categories.html ├── edit_category.html ├── edit_task.html ├── login.html ├── profile.html ├── register.html └── tasks.html └── textIndexCommands.md /01-PuttingTheBasicsInPlace/02-create_the_flask_application/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/02-create_the_flask_application/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import Flask 3 | if os.path.exists("env.py"): 4 | import env 5 | 6 | 7 | app = Flask(__name__) 8 | 9 | 10 | @app.route("/") 11 | def hello(): 12 | return "Hello World ... again!" 13 | 14 | 15 | if __name__ == "__main__": 16 | app.run(host=os.environ.get("IP"), 17 | port=int(os.environ.get("PORT")), 18 | debug=True) 19 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/02-create_the_flask_application/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/02-create_the_flask_application/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/03-deploy_the_application_to_heroku/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/03-deploy_the_application_to_heroku/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/03-deploy_the_application_to_heroku/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import Flask 3 | if os.path.exists("env.py"): 4 | import env 5 | 6 | 7 | app = Flask(__name__) 8 | 9 | 10 | @app.route("/") 11 | def hello(): 12 | return "Hello World ... again!" 13 | 14 | 15 | if __name__ == "__main__": 16 | app.run(host=os.environ.get("IP"), 17 | port=int(os.environ.get("PORT")), 18 | debug=True) 19 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/03-deploy_the_application_to_heroku/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/03-deploy_the_application_to_heroku/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | if os.path.exists("env.py"): 8 | import env 9 | 10 | 11 | app = Flask(__name__) 12 | 13 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 14 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 15 | app.secret_key = os.environ.get("SECRET_KEY") 16 | 17 | mongo = PyMongo(app) 18 | 19 | 20 | @app.route("/") 21 | @app.route("/get_tasks") 22 | def get_tasks(): 23 | tasks = mongo.db.tasks.find() 24 | return render_template("tasks.html", tasks=tasks) 25 | 26 | 27 | if __name__ == "__main__": 28 | app.run(host=os.environ.get("IP"), 29 | port=int(os.environ.get("PORT")), 30 | debug=True) 31 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/04-connect_flask_to_mongodb/templates/tasks.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Task Manager 7 | 8 | 9 | {% for task in tasks %} 10 | {{ task.task_name }}
11 | {{ task.category_name }}
12 | {{ task.task_description }}
13 | {{ task.is_urgent }}
14 | {{ task.due_date }}
15 | {% endfor %} 16 | 17 | 18 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | if os.path.exists("env.py"): 8 | import env 9 | 10 | 11 | app = Flask(__name__) 12 | 13 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 14 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 15 | app.secret_key = os.environ.get("SECRET_KEY") 16 | 17 | mongo = PyMongo(app) 18 | 19 | 20 | @app.route("/") 21 | @app.route("/get_tasks") 22 | def get_tasks(): 23 | tasks = mongo.db.tasks.find() 24 | return render_template("tasks.html", tasks=tasks) 25 | 26 | 27 | if __name__ == "__main__": 28 | app.run(host=os.environ.get("IP"), 29 | port=int(os.environ.get("PORT")), 30 | debug=True) 31 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Task Manager 7 | 8 | 9 | 10 |

I'm part of the base template!

11 | {% block content %} 12 | {% endblock %} 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/05-template_inheritance/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

I'm extending the base template!

5 | 6 | {% for task in tasks %} 7 | {{ task.task_name }}
8 | {{ task.category_name }}
9 | {{ task.task_description }}
10 | {{ task.is_urgent }}
11 | {{ task.due_date }}
12 | {% endfor %} 13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | if os.path.exists("env.py"): 8 | import env 9 | 10 | 11 | app = Flask(__name__) 12 | 13 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 14 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 15 | app.secret_key = os.environ.get("SECRET_KEY") 16 | 17 | mongo = PyMongo(app) 18 | 19 | 20 | @app.route("/") 21 | @app.route("/get_tasks") 22 | def get_tasks(): 23 | tasks = mongo.db.tasks.find() 24 | return render_template("tasks.html", tasks=tasks) 25 | 26 | 27 | if __name__ == "__main__": 28 | app.run(host=os.environ.get("IP"), 29 | port=int(os.environ.get("PORT")), 30 | debug=True) 31 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/static/css/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Code-Institute-Solutions/TaskManagerAuth/63d853c46cced2a8b7f6d894686ab44001b21e6a/01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/static/css/style.css -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/static/js/script.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Code-Institute-Solutions/TaskManagerAuth/63d853c46cced2a8b7f6d894686ab44001b21e6a/01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/static/js/script.js -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | {% block styles %} 11 | {% endblock %} 12 | Task Manager 13 | 14 | 15 | 16 | {% block content %} 17 | {% endblock %} 18 | 19 | 21 | 22 | 23 | {% block scripts %} 24 | {% endblock %} 25 | 26 | 27 | -------------------------------------------------------------------------------- /01-PuttingTheBasicsInPlace/06-materialize_and_static_files_setup/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | if os.path.exists("env.py"): 8 | import env 9 | 10 | 11 | app = Flask(__name__) 12 | 13 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 14 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 15 | app.secret_key = os.environ.get("SECRET_KEY") 16 | 17 | mongo = PyMongo(app) 18 | 19 | 20 | @app.route("/") 21 | @app.route("/get_tasks") 22 | def get_tasks(): 23 | tasks = mongo.db.tasks.find() 24 | return render_template("tasks.html", tasks=tasks) 25 | 26 | 27 | if __name__ == "__main__": 28 | app.run(host=os.environ.get("IP"), 29 | port=int(os.environ.get("PORT")), 30 | debug=True) 31 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | {% block styles %} 11 | {% endblock %} 12 | Task Manager 13 | 14 | 15 | 16 |
17 | 18 | 33 | 34 | 35 | 45 |
46 | 47 | {% block content %} 48 | {% endblock %} 49 | 50 | 52 | 53 | 54 | {% block scripts %} 55 | {% endblock %} 56 | 57 | 58 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/01-adding_a_nav_bar/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | from werkzeug.security import generate_password_hash, check_password_hash 8 | if os.path.exists("env.py"): 9 | import env 10 | 11 | 12 | app = Flask(__name__) 13 | 14 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 15 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 16 | app.secret_key = os.environ.get("SECRET_KEY") 17 | 18 | mongo = PyMongo(app) 19 | 20 | 21 | @app.route("/") 22 | @app.route("/get_tasks") 23 | def get_tasks(): 24 | tasks = mongo.db.tasks.find() 25 | return render_template("tasks.html", tasks=tasks) 26 | 27 | 28 | @app.route("/register", methods=["GET", "POST"]) 29 | def register(): 30 | return render_template("register.html") 31 | 32 | 33 | if __name__ == "__main__": 34 | app.run(host=os.environ.get("IP"), 35 | port=int(os.environ.get("PORT")), 36 | debug=True) 37 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | {% block styles %} 11 | {% endblock %} 12 | Task Manager 13 | 14 | 15 | 16 |
17 | 18 | 33 | 34 | 35 | 45 |
46 | 47 | {% block content %} 48 | {% endblock %} 49 | 50 | 52 | 53 | 54 | {% block scripts %} 55 | {% endblock %} 56 | 57 | 58 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | 23 |
24 |
25 | 26 |
27 | 30 |
31 |
32 |
33 |
34 | 35 | {% endblock %} 36 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/02-register_page/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import ( 3 | Flask, flash, render_template, 4 | redirect, request, session, url_for) 5 | from flask_pymongo import PyMongo 6 | from bson.objectid import ObjectId 7 | from werkzeug.security import generate_password_hash, check_password_hash 8 | if os.path.exists("env.py"): 9 | import env 10 | 11 | 12 | app = Flask(__name__) 13 | 14 | app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") 15 | app.config["MONGO_URI"] = os.environ.get("MONGO_URI") 16 | app.secret_key = os.environ.get("SECRET_KEY") 17 | 18 | mongo = PyMongo(app) 19 | 20 | 21 | @app.route("/") 22 | @app.route("/get_tasks") 23 | def get_tasks(): 24 | tasks = mongo.db.tasks.find() 25 | return render_template("tasks.html", tasks=tasks) 26 | 27 | 28 | @app.route("/register", methods=["GET", "POST"]) 29 | def register(): 30 | if request.method == "POST": 31 | # check if username already exists in db 32 | existing_user = mongo.db.users.find_one( 33 | {"username": request.form.get("username").lower()}) 34 | 35 | if existing_user: 36 | flash("Username already exists") 37 | return redirect(url_for("register")) 38 | 39 | register = { 40 | "username": request.form.get("username").lower(), 41 | "password": generate_password_hash(request.form.get("password")) 42 | } 43 | mongo.db.users.insert_one(register) 44 | 45 | # put the new user into 'session' cookie 46 | session["user"] = request.form.get("username").lower() 47 | flash("Registration Successful!") 48 | return render_template("register.html") 49 | 50 | 51 | if __name__ == "__main__": 52 | app.run(host=os.environ.get("IP"), 53 | port=int(os.environ.get("PORT")), 54 | debug=True) 55 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 | {% endblock %} 38 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/03-register_functionality/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/04-login_functionality/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/05-display_user_profile_page/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | }); 8 | 9 | 10 | 11 | 12 | 13 | /* 14 | vanilla JavaScript for MaterializeCSS initialization 15 | */ 16 | 17 | // document.addEventListener('DOMContentLoaded', function () { 18 | // let sidenavs = document.querySelectorAll(".sidenav"); 19 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 20 | // }); -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /02-UserAuthenticationAndAuthorization/06-logout_functionality/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | }); 9 | 10 | 11 | 12 | 13 | 14 | /* 15 | vanilla JavaScript for MaterializeCSS initialization 16 | */ 17 | 18 | // document.addEventListener('DOMContentLoaded', function () { 19 | // let sidenavs = document.querySelectorAll(".sidenav"); 20 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 21 | // let collapsibles = document.querySelectorAll(".collapsible"); 22 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 23 | // }); -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/01-accordion_setup/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% for task in tasks %} 5 | {{ task.task_name }}
6 | {{ task.category_name }}
7 | {{ task.task_description }}
8 | {{ task.is_urgent }}
9 | {{ task.due_date }}
10 | {% endfor %} 11 | 12 |
    13 |
  • 14 |
    First
    15 |
    Lorem ipsum dolor sit amet.
    16 |
  • 17 |
  • 18 |
    Second
    19 |
    Lorem ipsum dolor sit amet.
    20 |
  • 21 |
  • 22 |
    Third
    23 |
    Lorem ipsum dolor sit amet.
    24 |
  • 25 |
26 | 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | $(".tooltipped").tooltip(); 9 | }); 10 | 11 | 12 | 13 | 14 | 15 | /* 16 | vanilla JavaScript for MaterializeCSS initialization 17 | */ 18 | 19 | // document.addEventListener('DOMContentLoaded', function () { 20 | // let sidenavs = document.querySelectorAll(".sidenav"); 21 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 22 | // let collapsibles = document.querySelectorAll(".collapsible"); 23 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 24 | // let tooltips = document.querySelectorAll(".tooltipped"); 25 | // let tooltipsInstance = M.Tooltip.init(tooltips); 26 | // }); -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/02-accordion_task_data_binding/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
    5 | {% for task in tasks %} 6 |
  • 7 |
    8 | 9 | {{ task.task_name }} : {{ task.due_date }} 10 | {% if task.is_urgent == "on" %} 11 | 13 | {% endif %} 14 |
    15 |
    16 | {{ task.category_name }} 17 |

    {{ task.task_description }}

    18 |
    19 |
  • 20 | {% endfor %} 21 |
22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | $(".tooltipped").tooltip(); 9 | }); 10 | 11 | 12 | 13 | 14 | 15 | /* 16 | vanilla JavaScript for MaterializeCSS initialization 17 | */ 18 | 19 | // document.addEventListener('DOMContentLoaded', function () { 20 | // let sidenavs = document.querySelectorAll(".sidenav"); 21 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 22 | // let collapsibles = document.querySelectorAll(".collapsible"); 23 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 24 | // let tooltips = document.querySelectorAll(".tooltipped"); 25 | // let tooltipsInstance = M.Tooltip.init(tooltips); 26 | // }); -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/templates/add_task.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Task

5 | 6 |
7 |
8 |
9 |
10 | 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 |
19 |
20 |
21 |
22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/04-add_task_form_boilerplate/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
    5 | {% for task in tasks %} 6 |
  • 7 |
    8 | 9 | {{ task.task_name }} : {{ task.due_date }} 10 | {% if task.is_urgent == "on" %} 11 | 13 | {% endif %} 14 |
    15 |
    16 | {{ task.category_name }} 17 |

    {{ task.task_description }}

    18 |
    19 |
  • 20 | {% endfor %} 21 |
22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | $(".tooltipped").tooltip(); 9 | $(".datepicker").datepicker({ 10 | format: "dd mmmm, yyyy", 11 | yearRange: 3, 12 | showClearBtn: true, 13 | i18n: { 14 | done: "Select" 15 | } 16 | }); 17 | }); 18 | 19 | 20 | 21 | 22 | 23 | /* 24 | vanilla JavaScript for MaterializeCSS initialization 25 | */ 26 | 27 | // document.addEventListener('DOMContentLoaded', function () { 28 | // let sidenavs = document.querySelectorAll(".sidenav"); 29 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 30 | // let collapsibles = document.querySelectorAll(".collapsible"); 31 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 32 | // let tooltips = document.querySelectorAll(".tooltipped"); 33 | // let tooltipsInstance = M.Tooltip.init(tooltips); 34 | // let datepickers = document.querySelectorAll(".datepicker"); 35 | // let datepickersInstance = M.Datepicker.init(datepickers, { 36 | // format: "dd mmmm, yyyy", 37 | // yearRange: 3, 38 | // showClearBtn: true, 39 | // i18n: { 40 | // done: "Select" 41 | // } 42 | // }); 43 | // }); -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/templates/add_task.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Task

5 | 6 |
7 |
8 |
9 |
10 | 11 | 13 | 14 |
15 |
16 |
17 |
18 | 19 | 21 | 22 |
23 |
24 |
25 |
26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 |
34 | 35 | 40 |
41 |
42 |
43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/05-add_task_form_input_fields/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
    5 | {% for task in tasks %} 6 |
  • 7 |
    8 | 9 | {{ task.task_name }} : {{ task.due_date }} 10 | {% if task.is_urgent == "on" %} 11 | 13 | {% endif %} 14 |
    15 |
    16 | {{ task.category_name }} 17 |

    {{ task.task_description }}

    18 |
    19 |
  • 20 | {% endfor %} 21 |
22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | $(".tooltipped").tooltip(); 9 | $("select").formSelect(); 10 | $(".datepicker").datepicker({ 11 | format: "dd mmmm, yyyy", 12 | yearRange: 3, 13 | showClearBtn: true, 14 | i18n: { 15 | done: "Select" 16 | } 17 | }); 18 | }); 19 | 20 | 21 | 22 | 23 | 24 | /* 25 | vanilla JavaScript for MaterializeCSS initialization 26 | */ 27 | 28 | // document.addEventListener('DOMContentLoaded', function () { 29 | // let sidenavs = document.querySelectorAll(".sidenav"); 30 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 31 | // let collapsibles = document.querySelectorAll(".collapsible"); 32 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 33 | // let tooltips = document.querySelectorAll(".tooltipped"); 34 | // let tooltipsInstance = M.Tooltip.init(tooltips); 35 | // let selects = document.querySelectorAll("select"); 36 | // let selectsInstance = M.FormSelect.init(selects); 37 | // let datepickers = document.querySelectorAll(".datepicker"); 38 | // let datepickersInstance = M.Datepicker.init(datepickers, { 39 | // format: "dd mmmm, yyyy", 40 | // yearRange: 3, 41 | // showClearBtn: true, 42 | // i18n: { 43 | // done: "Select" 44 | // } 45 | // }); 46 | // }); -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /03-AddingATask-AcceptingUserInput/06-allow_task_category_selection/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
    5 | {% for task in tasks %} 6 |
  • 7 |
    8 | 9 | {{ task.task_name }} : {{ task.due_date }} 10 | {% if task.is_urgent == "on" %} 11 | 13 | {% endif %} 14 |
    15 |
    16 | {{ task.category_name }} 17 |

    {{ task.task_description }}

    18 |
    19 |
  • 20 | {% endfor %} 21 |
22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/static/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | jQuery for MaterializeCSS initialization 3 | */ 4 | 5 | $(document).ready(function () { 6 | $(".sidenav").sidenav({edge: "right"}); 7 | $(".collapsible").collapsible(); 8 | $(".tooltipped").tooltip(); 9 | $("select").formSelect(); 10 | $(".datepicker").datepicker({ 11 | format: "dd mmmm, yyyy", 12 | yearRange: 3, 13 | showClearBtn: true, 14 | i18n: { 15 | done: "Select" 16 | } 17 | }); 18 | }); 19 | 20 | 21 | 22 | 23 | 24 | /* 25 | vanilla JavaScript for MaterializeCSS initialization 26 | */ 27 | 28 | // document.addEventListener('DOMContentLoaded', function () { 29 | // let sidenavs = document.querySelectorAll(".sidenav"); 30 | // let sidenavsInstance = M.Sidenav.init(sidenavs, {edge: "right"}); 31 | // let collapsibles = document.querySelectorAll(".collapsible"); 32 | // let collapsiblesInstance = M.Collapsible.init(collapsibles); 33 | // let tooltips = document.querySelectorAll(".tooltipped"); 34 | // let tooltipsInstance = M.Tooltip.init(tooltips); 35 | // let selects = document.querySelectorAll("select"); 36 | // let selectsInstance = M.FormSelect.init(selects); 37 | // let datepickers = document.querySelectorAll(".datepicker"); 38 | // let datepickersInstance = M.Datepicker.init(datepickers, { 39 | // format: "dd mmmm, yyyy", 40 | // yearRange: 3, 41 | // showClearBtn: true, 42 | // i18n: { 43 | // done: "Select" 44 | // } 45 | // }); 46 | // }); -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/01-submit_add_task_form_data/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 | 11 | {{ task.task_name }} : {{ task.due_date }} 12 | {% if task.is_urgent == "on" %} 13 | 15 | {% endif %} 16 |
    17 |
    18 | {{ task.category_name }} 19 |

    {{ task.task_description }}

    20 |

    by: {{ task.created_by }}

    21 |
    22 |
  • 23 | {% endfor %} 24 |
25 | 26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /04-AddingATask-WritingToTheDatabase/02-materialize-select-validation/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 | 11 | {{ task.task_name }} : {{ task.due_date }} 12 | {% if task.is_urgent == "on" %} 13 | 15 | {% endif %} 16 |
    17 |
    18 | {{ task.category_name }} 19 |

    {{ task.task_description }}

    20 |

    by: {{ task.created_by }}

    21 |
    22 |
  • 23 | {% endfor %} 24 |
25 | 26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/01-adding_edit_and_done_task_buttons/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | Done 13 | Edit 14 |
    15 |
    16 | {{ task.task_name }} : {{ task.due_date }} 17 | {% if task.is_urgent == "on" %} 18 | 20 | {% endif %} 21 |
    22 |
    23 |
    24 | {{ task.category_name }} 25 |

    {{ task.task_description }}

    26 |

    by: {{ task.created_by }}

    27 |
    28 |
  • 29 | {% endfor %} 30 |
31 | 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/02-wire_up_task-edit_button/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | Done 13 | Edit 14 |
    15 |
    16 | {{ task.task_name }} : {{ task.due_date }} 17 | {% if task.is_urgent == "on" %} 18 | 20 | {% endif %} 21 |
    22 |
    23 |
    24 | {{ task.category_name }} 25 |

    {{ task.task_description }}

    26 |

    by: {{ task.created_by }}

    27 |
    28 |
  • 29 | {% endfor %} 30 |
31 | 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/03-bind_data_to_edit_task_form/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | Done 13 | Edit 14 |
    15 |
    16 | {{ task.task_name }} : {{ task.due_date }} 17 | {% if task.is_urgent == "on" %} 18 | 20 | {% endif %} 21 |
    22 |
    23 |
    24 | {{ task.category_name }} 25 |

    {{ task.task_description }}

    26 |

    by: {{ task.created_by }}

    27 |
    28 |
  • 29 | {% endfor %} 30 |
31 | 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /05-EditingATask/04-update_task_in_the_database/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /06-DeleteATask/01-delete_task/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/templates/categories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Manage Categories

5 | 6 |
7 | {% for category in categories %} 8 |
9 |
10 |
11 | {{ category.category_name }} 12 |
13 |
14 | Edit 15 | Delete 16 |
17 |
18 |
19 | {% endfor %} 20 |
21 | 22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/01-display_categories/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/add_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/categories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Manage Categories

5 | 6 |
7 | 12 |
13 | 14 |
15 | {% for category in categories %} 16 |
17 |
18 |
19 | {{ category.category_name }} 20 |
21 |
22 | Edit 23 | Delete 24 |
25 |
26 |
27 | {% endfor %} 28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/02-add_category/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/add_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/categories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Manage Categories

5 | 6 |
7 | 12 |
13 | 14 |
15 | {% for category in categories %} 16 |
17 |
18 |
19 | {{ category.category_name }} 20 |
21 |
22 | Edit 23 | Delete 24 |
25 |
26 |
27 | {% endfor %} 28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/edit_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Edit Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 | Cancel 22 | 23 | 26 |
27 |
28 |
29 |
30 | 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/03-update_category/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/add_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/categories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Manage Categories

5 | 6 |
7 | 12 |
13 | 14 |
15 | {% for category in categories %} 16 |
17 |
18 |
19 | {{ category.category_name }} 20 |
21 |
22 | Edit 23 | Delete 24 |
25 |
26 |
27 | {% endfor %} 28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/edit_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Edit Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 | Cancel 22 | 23 | 26 |
27 |
28 |
29 |
30 | 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /07-ManageCategories/04-delete_category/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
    7 | {% for task in tasks %} 8 |
  • 9 |
    10 |
    11 | 12 | {% if session.user|lower == task.created_by|lower %} 13 | Done 14 | Edit 15 | {% endif %} 16 |
    17 |
    18 | {{ task.task_name }} : {{ task.due_date }} 19 | {% if task.is_urgent == "on" %} 20 | 22 | {% endif %} 23 |
    24 |
    25 |
    26 | {{ task.category_name }} 27 |

    {{ task.task_description }}

    28 |

    by: {{ task.created_by }}

    29 |
    30 |
  • 31 | {% endfor %} 32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/.gitignore: -------------------------------------------------------------------------------- 1 | env.py 2 | __pycache__/ 3 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/env_sample.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("IP", "0.0.0.0") 4 | os.environ.setdefault("PORT", "5000") 5 | os.environ.setdefault("SECRET_KEY", "your_secret_key_here") 6 | os.environ.setdefault("MONGO_URI", "mongodb+srv://:@-4g3i1.mongodb.net/?retryWrites=true&w=majority") 7 | os.environ.setdefault("MONGO_DBNAME", "task_manager") 8 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | dnspython==2.0.0 3 | Flask==1.1.2 4 | Flask-PyMongo==2.3.0 5 | itsdangerous==1.1.0 6 | pymongo==3.11.0 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/static/css/style.css: -------------------------------------------------------------------------------- 1 | .text-shadow { 2 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); 3 | } 4 | 5 | .flashes h4 { 6 | line-height: 2; 7 | } 8 | 9 | .btn-small { 10 | margin: 5px; 11 | } 12 | 13 | .collapsible-header .col strong { 14 | margin: 5px; 15 | line-height: 42px; 16 | } 17 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/add_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Add Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/categories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Manage Categories

5 | 6 |
7 | 12 |
13 | 14 |
15 | {% for category in categories %} 16 |
17 |
18 |
19 | {{ category.category_name }} 20 |
21 |
22 | Edit 23 | Delete 24 |
25 |
26 |
27 | {% endfor %} 28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/edit_category.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Edit Category

5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 | Cancel 22 | 23 | 26 |
27 |
28 |
29 |
30 | 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Log In

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | New Here? 41 | Register Account 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |
5 |
6 |
7 |

8 | {{ username }}'s Profile 9 |

10 |
11 |
12 |
13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

Register

5 | 6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 24 | 25 |
26 |
27 | 28 |
29 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |

40 | Already Registered? 41 | Log In 42 |

43 |
44 |
45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/templates/tasks.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 |

All Tasks

5 | 6 |
7 |
8 |
9 |
10 | 11 | 12 | 13 |
14 |
15 | Reset 16 | 19 |
20 |
21 |
22 |
23 | 24 | {% if tasks|length > 0 %} 25 |
    26 | {% for task in tasks %} 27 |
  • 28 |
    29 |
    30 | 31 | {% if session.user|lower == task.created_by|lower %} 32 | Done 33 | Edit 34 | {% endif %} 35 |
    36 |
    37 | {{ task.task_name }} : {{ task.due_date }} 38 | {% if task.is_urgent == "on" %} 39 | 41 | {% endif %} 42 |
    43 |
    44 |
    45 | {{ task.category_name }} 46 |

    {{ task.task_description }}

    47 |

    by: {{ task.created_by }}

    48 |
    49 |
  • 50 | {% endfor %} 51 |
52 | {% else %} 53 |

No Results Found

54 | {% endif %} 55 | 56 | {% endblock %} 57 | -------------------------------------------------------------------------------- /08-SearchingWithinTheDatabase/01-text_index_searching/textIndexCommands.md: -------------------------------------------------------------------------------- 1 | ### Access the Python Interpreter: 2 | - `python3` 3 | 4 | 5 | ### Import the 'mongo' instance from app.py: 6 | - `from app import mongo` 7 | 8 | 9 | ### Create Index on the 'tasks' collection, using 'task_name' and 'task_description' keys: 10 | - **NOTE**: You can only have a maximum of ONE Index on the collection, but multiple keys permitted on that Index. 11 | - `mongo.db.tasks.create_index([("task_name", "text"), ("task_description", "text")])` 12 | 13 | 14 | ### See all Index information: 15 | - `mongo.db.tasks.index_information()` 16 | 17 | 18 | ### Drop/Delete a single Index: 19 | - `mongo.db.tasks.drop_index('task_name_text_task_description_text')` 20 | 21 | 22 | ### Drop/Delete all Indexes: 23 | - `mongo.db.tasks.drop_indexes()` 24 | 25 | 26 | ### Quit the Python Interpreter: 27 | - `quit()` 28 | --------------------------------------------------------------------------------