{{ post.title }}
+{{ post.content }}
+diff --git a/app/minibase/__init__.py b/app/minibase/__init__.py new file mode 100644 index 00000000..282cdc3f --- /dev/null +++ b/app/minibase/__init__.py @@ -0,0 +1,45 @@ +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_bcrypt import Bcrypt +from flask_login import LoginManager +from flask_mail import Mail +from minibase.config import Config + +# (DATABASE) Definition +db = SQLAlchemy() + +# (PASSWORD) Hashign Program to save paswords safely +bcrypt = Bcrypt() + +# (LOGIN) Login manage plugin configuration +login_manager = LoginManager() +login_manager.login_view = 'users.login' +login_manager.login_message_category = 'info' # Boostrap Info Message + +# (EMAIL AGENT) Definition +mail = Mail() + + +def create_minibase(config_class=Config): + # (FLASK) Main Flask Application + app = Flask(__name__) + app.config.from_object(Config) + # (DATABASE) Initialisation + db.init_app(app) + # (PASSWORD) Initialisation + bcrypt.init_app(app) + # (LOGIN) Initialisation + login_manager.init_app(app) + # (EMAIL AGENT) Initialisation + mail.init_app(app) + # (FLASK) Importing adn then registering blueprints + from minibase.users.routes import users + from minibase.posts.routes import posts + from minibase.main.routes import main + from minibase.errors.handlers import errors + app.register_blueprint(users) + app.register_blueprint(posts) + app.register_blueprint(main) + app.register_blueprint(errors) + # Retunr The ccreated app + return app diff --git a/app/minibase/__pycache__/__init__.cpython-311.pyc b/app/minibase/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..c118fbb8 Binary files /dev/null and b/app/minibase/__pycache__/__init__.cpython-311.pyc differ diff --git a/app/minibase/__pycache__/config.cpython-311.pyc b/app/minibase/__pycache__/config.cpython-311.pyc new file mode 100644 index 00000000..57247110 Binary files /dev/null and b/app/minibase/__pycache__/config.cpython-311.pyc differ diff --git a/app/minibase/__pycache__/models.cpython-311.pyc b/app/minibase/__pycache__/models.cpython-311.pyc new file mode 100644 index 00000000..64967007 Binary files /dev/null and b/app/minibase/__pycache__/models.cpython-311.pyc differ diff --git a/app/minibase/config.py b/app/minibase/config.py new file mode 100644 index 00000000..e5481608 --- /dev/null +++ b/app/minibase/config.py @@ -0,0 +1,45 @@ +import os + + +class themeMinibase(): + # Basic Color definitions + black = "#191717" + white = "#f1f1f1" + light_blue = "#9bd7d1" + dark_blue = "#305d7a" + light_orange = "#f9a36c" + orange = "#f26628" + yellow = "#f8cb66" + # Define layout styling + layoutBgColor = "background-color: " + white + layoutNavbarBgColor = "background-color: " + black + # (formUserInput) Used For password email and acount informations + userInputFormColor = "background-color: #f1f1ff" + userInputFormStyle = {'class': 'form-control form-control-lg'} + userInputFormWitdh = "width: 420px;" + userInputDivClass = "content-section" + tableClass = "table table-striped table-dark" + homeOverviewBgColor = "background-color: " + yellow + homeNewsBgColor = "background-color: " + light_blue + homeSearchBgColor = "background-color: " + light_orange + # General Template Definition + + image = "rounded-circle account-img" + legend = "border-bottom mb-2" + smallInfoTextClass = "text-muted" + + +class Config: + # (FLASK) Sectret key wich will be used to secure some requests an connections + SECRET_KEY = os.environ.get('MINIBASE_SECRET_KEY') + + # (SQLALCHEMY) COnfiguration + SQLALCHEMY_DATABASE_URI = os.environ.get('MINIBASE_SQLALCHEMY_DATABASE_URI') + + # (MAIL AGENT) Configure mail Server to send EMails. + MAIL_SERVER = os.environ.get('MINIBASE_MAIL_SERVER') + MAIL_USERNAME = os.environ.get('MINIBASE_MAIL_USERNAME') + MAIL_PASSWORD = os.environ.get('MINIBASE_MAIL_PASSWORD') + MAIL_PORT = 465 + MAIL_USE_TLS = False + MAIL_USE_SSL = True diff --git a/app/minibase/errors/__pycache__/handlers.cpython-311.pyc b/app/minibase/errors/__pycache__/handlers.cpython-311.pyc new file mode 100644 index 00000000..63ec01f3 Binary files /dev/null and b/app/minibase/errors/__pycache__/handlers.cpython-311.pyc differ diff --git a/app/minibase/errors/handlers.py b/app/minibase/errors/handlers.py new file mode 100644 index 00000000..737cba33 --- /dev/null +++ b/app/minibase/errors/handlers.py @@ -0,0 +1,16 @@ +from flask import Blueprint, render_template + +errors = Blueprint('errors', __name__) + +@errors.app_errorhandler(404) +def error_404(error): + return render_template('errors/404.html'), 404 + +@errors.app_errorhandler(403) +def error_403(error): + return render_template('errors/403.html'), 403 + +@errors.app_errorhandler(500) +def error_500(error): + return render_template('errors/500.html'), 500 + diff --git a/app/minibase/main/__init.py__ b/app/minibase/main/__init.py__ new file mode 100644 index 00000000..e69de29b diff --git a/app/minibase/main/__pycache__/routes.cpython-311.pyc b/app/minibase/main/__pycache__/routes.cpython-311.pyc new file mode 100644 index 00000000..7117ffab Binary files /dev/null and b/app/minibase/main/__pycache__/routes.cpython-311.pyc differ diff --git a/app/minibase/main/routes.py b/app/minibase/main/routes.py new file mode 100644 index 00000000..8bc52bff --- /dev/null +++ b/app/minibase/main/routes.py @@ -0,0 +1,26 @@ +from flask import render_template, request, Blueprint +from minibase.models import Post +from minibase.config import themeMinibase + +# Declaring a blueprint +main = Blueprint('main', __name__) + +# Redirect from / and also /home routes to the / +@main.route("/") +@main.route("/home") +def home(): + # (PAGINATION) Defines the page number that we will start with + page = request.args.get('page', 1, type=int) + # (POSTS) Query posts usin SQLAlchemy + posts = Post.query.order_by(Post.date_posted.asc()).paginate(per_page=2) + # (HTML) Renders the template for templates/home.html + return render_template('home.html', theme=themeMinibase, posts=posts) + + +@main.route("/about") +def about(): + return render_template('about.html', theme=themeMinibase, title='About') + +@main.route("/customer") +def customer(): + return render_template('customer.html', theme=themeMinibase, title='About') diff --git a/app/minibase/models.py b/app/minibase/models.py new file mode 100644 index 00000000..33ced29b --- /dev/null +++ b/app/minibase/models.py @@ -0,0 +1,49 @@ +from itsdangerous import TimedJSONWebSignatureSerializer as Serializer +from datetime import datetime +from minibase import db, login_manager +from flask_login import UserMixin +from flask import url_for, current_app + + +@login_manager.user_loader +def load_user(user_id): + return User.query.get(int(user_id)) + + +class User(db.Model, UserMixin): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(20), unique=True, nullable=False) + email = db.Column(db.String(120), unique=True, nullable=False) + image_file = db.Column(db.String(20), nullable=False, default='default.jpg') + password = db.Column(db.String(60), nullable=False) + # Additional Querry to link a post wiht an author in the sql this won't be an field + posts = db.relationship('Post', backref='author', lazy=True) + + def get_reset_token(self, expires_sec=1800): + s = Serializer(current_app.config['SECRET_KEY'], expires_sec) + return s.dumps({'user_id': self.id}).decode('utf-8') + + @staticmethod + def verify_reset_token(token): + s = Serializer(current_app.config['SECRET_KEY']) + try: + user_id = s.loads(token)['user_id'] + except: + return 0 + return User.query.get(user_id) + + # returns a more information-rich, or official, string representation of an object + def __repr__(self): + return f"User('{self.username}', '{self.email}', '{self.image_file}')" + + +class Post(db.Model): + id = db.Column(db.Integer, primary_key=True) + title = db.Column(db.String(100), nullable=False) + date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + content = db.Column(db.Text, nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + + # returns a more information-rich, or official, string representation of an object + def __repr__(self): + return f"User('{self.title}', '{self.date_posted}')" diff --git a/app/minibase/static/main.css b/app/minibase/static/main.css new file mode 100644 index 00000000..352f4f2f --- /dev/null +++ b/app/minibase/static/main.css @@ -0,0 +1,17 @@ +.bg-kynsight { + background-color: #191717; +} + +.content-section { + padding: 10px 20px; + border: 1px solid #dddddd; + border-radius: 3px; + margin-bottom: 20px; +} + +.account-img { + height: 125px; + width: 125px; + margin-right: 20px; + margin-bottom: 16px; +} diff --git a/app/minibase/static/pics/328d4576bc7c982f.jpg b/app/minibase/static/pics/328d4576bc7c982f.jpg new file mode 100644 index 00000000..62f20a96 Binary files /dev/null and b/app/minibase/static/pics/328d4576bc7c982f.jpg differ diff --git a/app/minibase/static/pics/ca730803911d6ef1.jpg b/app/minibase/static/pics/ca730803911d6ef1.jpg new file mode 100644 index 00000000..e1436263 Binary files /dev/null and b/app/minibase/static/pics/ca730803911d6ef1.jpg differ diff --git a/app/minibase/static/pics/default.jpg b/app/minibase/static/pics/default.jpg new file mode 100644 index 00000000..38f286f6 Binary files /dev/null and b/app/minibase/static/pics/default.jpg differ diff --git a/app/minibase/templates/about.html b/app/minibase/templates/about.html new file mode 100644 index 00000000..2024e4de --- /dev/null +++ b/app/minibase/templates/about.html @@ -0,0 +1,5 @@ +{% extends "layout.html" %} + +{% block content %} +
+ Name : kerem yollu
+ Address : Meireackerstasse 10 / 8610 Uster / Schweiz
+ Email:{{ current_user.email }}
+
TOP PROJ. | +Name | +Potential | +Delivered | +
---|---|---|---|
1 | +Mark | +Otto | +@mdo | +
2 | +Jacob | +Thornton | +@fat | +
3 | +Larry | +the Bird | +
TOP IC's | +Name | +Potential | +Delivered | +
---|---|---|---|
1 | +Mark | +Otto | +@mdo | +
2 | +Jacob | +Thornton | +@fat | +
3 | +Larry | +the Bird | +
TOP MAN. | +Name | +Potential | +Delivered | +
---|---|---|---|
1 | +Mark | +Otto | +@mdo | +
2 | +Jacob | +Thornton | +@fat | +
3 | +Larry | +the Bird | +
PLease Check your account and try again
+That page doens not exist. Please try another one
+There Was an Error from our side please give us a moment and try again later
+Total | +Active | +Inactive | +ToDo | +Warning | +
---|---|---|---|---|
239 | +200 | +39 | +58 | +5 | +
Total | +Accepted | +Declined | +Closed | +Warning | +
---|---|---|---|---|
239 | +200 | +39 | +58 | +5 | +
Total POS | +Max Marg | +Min Marg | +Avg Marg | +Total Rev | +
---|---|---|---|---|
100'000 CHF | +35 % | +12 % | +23 % | +12'453 CHF | +
Name | +Company | +Tel | +Address | +|
---|---|---|---|---|
Stefan Walker | +Steinel | +stefan.walker@steinel.com | ++41554182111 | +Allmeindstrasse 10, 8840 Einsiedeln | +
Name | +Customer | +Customer Resp. | +Kynsight Resp. | +Date Created | +
---|---|---|---|---|
STWH-HS | +Steinel | +Stefan Walker | +Kerem Yollu | +01.02.2018 | +
Art. | +Manufacturer | +Desing In | +MDQ | +MOQ | +MPQ | +Price | +
---|---|---|---|---|---|---|
STM32F032G6T6Q | +StMicroelectronics | +YES | +1000 | +500 | +250 | +1.2 USD | +
{{ post.content }}
+{{ post.content }}
+{{ current_user.email }}
+
+ Name : kerem yollu
+ Address : Meireackerstasse 10 / 8610 Uster / Schweiz
+ Email:{{ current_user.email }}
+