├── database └── db.sql ├── .gitignore ├── utils └── db.py ├── static └── css │ └── main.css ├── Dockerfile ├── index.py ├── requirements.txt ├── config.py ├── templates ├── partials │ ├── _message.html │ ├── _navbar.html │ └── _taskForm.html ├── layout.html ├── update.html ├── index.html └── about.html ├── models └── contact.py ├── docker-compose.yml ├── app.py ├── README.md └── routes └── contacts.py /database/db.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE contactsdb; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | __pycache__ 3 | 4 | static/css/bootstrap.min.css 5 | 6 | .env -------------------------------------------------------------------------------- /utils/db.py: -------------------------------------------------------------------------------- 1 | from flask_sqlalchemy import SQLAlchemy 2 | 3 | db = SQLAlchemy() 4 | -------------------------------------------------------------------------------- /static/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #121212; 3 | } 4 | 5 | .bg-black { 6 | background: #090909 !important; 7 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8 2 | 3 | ADD . /code 4 | 5 | WORKDIR /code 6 | 7 | RUN pip install -r requirements.txt 8 | 9 | CMD python index.py 10 | 11 | -------------------------------------------------------------------------------- /index.py: -------------------------------------------------------------------------------- 1 | from app import app 2 | from utils.db import db 3 | 4 | with app.app_context(): 5 | db.create_all() 6 | 7 | if __name__ == '__main__': 8 | app.run(debug=True, host="0.0.0.0") 9 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | autopep8==1.6.0 2 | click==8.0.3 3 | Flask==2.0.2 4 | Flask-SQLAlchemy==2.5.1 5 | greenlet==1.1.2 6 | itsdangerous==2.0.1 7 | Jinja2==3.0.2 8 | MarkupSafe==2.0.1 9 | mysqlclient==2.0.3 10 | pycodestyle==2.8.0 11 | python-dotenv==0.19.1 12 | SQLAlchemy==1.4.26 13 | toml==0.10.2 14 | Werkzeug==2.0.2 15 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | from dotenv import load_dotenv 2 | import os 3 | 4 | load_dotenv() 5 | 6 | user = os.environ["MYSQL_USER"] 7 | password = os.environ["MYSQL_PASSWORD"] 8 | host = os.environ["MYSQL_HOST"] 9 | database = os.environ["MYSQL_DATABASE"] 10 | 11 | DATABASE_CONNECTION_URI = f'mysql://{user}:{password}@{host}/{database}' 12 | print(DATABASE_CONNECTION_URI) 13 | -------------------------------------------------------------------------------- /templates/partials/_message.html: -------------------------------------------------------------------------------- 1 | {% with messages = get_flashed_messages() %} {% if messages %} {% for message in 2 | messages %} 3 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem doloribus molestiae harum in, reprehenderit ipsa architecto totam a blanditiis aut corrupti ratione pariatur delectus quod asperiores, adipisci ipsam veritatis quos animi, necessitatibus sit consequatur. Aliquam quibusdam, laudantium dolore iste aspernatur quaerat, nostrum sequi illum tempore, laborum explicabo nesciunt quasi asperiores officia vitae beatae rem aliquid molestias consectetur exercitationem similique ab? Impedit esse labore dignissimos ut sit, facilis eaque error minima ipsam sint porro hic a atque quaerat excepturi autem perspiciatis dicta officia eum veniam maxime at! Mollitia assumenda ratione atque. Consequatur architecto voluptas esse delectus qui sunt eligendi perferendis, voluptatum, nemo, expedita provident. Corrupti adipisci deleniti sint ullam ut veniam similique ratione ipsam. Qui iste nulla possimus necessitatibus odit magnam laboriosam obcaecati alias ex saepe libero non quos at dignissimos hic neque reprehenderit aut, sit distinctio? Omnis dolor dignissimos autem minus asperiores amet, ipsum animi architecto sit quisquam ab laudantium molestias, sapiente nostrum accusamus quia qui nobis. Sunt reiciendis at, voluptatum similique eius aperiam molestiae nemo rerum, iste qui maxime iusto omnis expedita excepturi vitae aliquam dolorum doloribus commodi. Hic dolores in dolorem tenetur laborum similique error fuga vitae cum! Architecto, odio aut tempore eius autem iure reiciendis corporis perferendis neque veritatis quis sapiente libero ipsa voluptas labore fuga exercitationem alias nobis facilis qui numquam illum. Accusamus, quam nihil illo recusandae pariatur repellendus dolorem aliquid maiores amet ab omnis officiis esse nobis animi magnam dolore corrupti, quidem natus. Illo praesentium corrupti cumque voluptatibus deleniti, hic facilis maiores provident harum unde rem quisquam facere ex ducimus odio. Laborum excepturi voluptatibus dolorem doloribus. Labore corporis non obcaecati blanditiis dolorum facilis sequi, suscipit quam cum. Aliquam vitae voluptatem, consectetur iste repellat nulla fugit odio rerum rem minus architecto tempora, eveniet facilis nam nostrum suscipit? Delectus, consequatur repudiandae eos deserunt omnis modi quos perspiciatis.
8 |