File for classes created.
class to check for logged in user created
This commit is contained in:
		
							
								
								
									
										27
									
								
								lernplattform/classes.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								lernplattform/classes.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					from flask import Flask, request
 | 
				
			||||||
 | 
					from lernplattform import app
 | 
				
			||||||
 | 
					from lernplattform.models import User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class login():
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    A class for handling user login functionality.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Attributes:
 | 
				
			||||||
 | 
					        user_name (str): The username to be checked for authentication.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Methods:
 | 
				
			||||||
 | 
					        __init__(self, user_name=None): Initializes the login object with a given user name.
 | 
				
			||||||
 | 
					        check(user_name): A static method that checks if the provided user name is valid.
 | 
				
			||||||
 | 
					        login(self): Prints "Login" to indicate that the login method has been called.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    def __init__(self, user_name=None):
 | 
				
			||||||
 | 
					        self.user_name = user_name  # Initialize the user name attribute for the login class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def check(user_name):
 | 
				
			||||||
 | 
					        if user_name is None:
 | 
				
			||||||
 | 
					            return False  # Return False if the user name is not provided
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return True  # Otherwise, return True indicating a valid user name
 | 
				
			||||||
 | 
					    def login(self):
 | 
				
			||||||
 | 
					        print("Login")  # Print "Login" to indicate that the login method has been called
 | 
				
			||||||
@@ -1,16 +1,23 @@
 | 
				
			|||||||
from lernplattform import db
 | 
					from lernplattform import db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define a User model that represents the user table in the database
 | 
				
			||||||
class User(db.Model):
 | 
					class User(db.Model):
 | 
				
			||||||
 | 
					    # Primary key column for the table, auto-incrementing integer
 | 
				
			||||||
    id = db.Column(db.Integer, primary_key=True)
 | 
					    id = db.Column(db.Integer, primary_key=True)
 | 
				
			||||||
 | 
					    # Username column with a maximum length of 20 characters, unique and not nullable
 | 
				
			||||||
    username = db.Column(db.String(20), unique=True, nullable=False)
 | 
					    username = db.Column(db.String(20), unique=True, nullable=False)
 | 
				
			||||||
 | 
					    # Email column with a maximum length of 120 characters, unique and not nullable
 | 
				
			||||||
    email = db.Column(db.String(120), unique=True, nullable=False)
 | 
					    email = db.Column(db.String(120), unique=True, nullable=False)
 | 
				
			||||||
 | 
					    # Password column with a maximum length of 60 characters, not nullable
 | 
				
			||||||
    password = db.Column(db.String(60), nullable=False)
 | 
					    password = db.Column(db.String(60), nullable=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Magic method to represent the object as a string when printed or used in string context
 | 
				
			||||||
    def __repr__(self):
 | 
					    def __repr__(self):
 | 
				
			||||||
        return f"User('{self.username}', '{self.email}')"
 | 
					        return f"User('{self.username}', '{self.email}')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Function to initialize the database by creating all tables defined in models if they do not exist
 | 
				
			||||||
def initialize_database():
 | 
					def initialize_database():
 | 
				
			||||||
    from lernplattform import app
 | 
					    from lernplattform import app
 | 
				
			||||||
 | 
					    # Create an application context before running operations on the database within this function
 | 
				
			||||||
    with app.app_context():
 | 
					    with app.app_context():
 | 
				
			||||||
        db.create_all()
 | 
					        db.create_all()
 | 
				
			||||||
        print("Database and tables created successfully.")
 | 
					 | 
				
			||||||
@@ -1,21 +1,57 @@
 | 
				
			|||||||
from flask import render_template, url_for, flash, redirect, jsonify
 | 
					from flask import render_template, url_for, flash, redirect, jsonify, request
 | 
				
			||||||
from lernplattform import app
 | 
					from lernplattform import app
 | 
				
			||||||
from lernplattform.models import User
 | 
					from lernplattform.models import User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from lernplattform import db
 | 
				
			||||||
 | 
					from lernplattform.classes import login
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route('/')
 | 
					@app.route('/')
 | 
				
			||||||
def index():
 | 
					def index():
 | 
				
			||||||
    # Render the main page with the list of users
 | 
					    """
 | 
				
			||||||
    return render_template('index.html')
 | 
					    Renders the main page of the application.
 | 
				
			||||||
 | 
					    This function checks if a user is logged in by checking for a 'user_name' cookie.
 | 
				
			||||||
 | 
					    If the user is logged in, it retrieves the username from the database using the cookie value.
 | 
				
			||||||
 | 
					    If not, it defaults to 'Gast'. The main page is then rendered with the current username.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Returns:
 | 
				
			||||||
 | 
					        A rendered HTML template with the current username.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    if login.check(request.cookies.get('user_name')):
 | 
				
			||||||
 | 
					        user_name = User.query.filter_by(username=request.cookies.get('user_name')).first().username 
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        # If not logged in, default to 'Gast'
 | 
				
			||||||
 | 
					        user_name = 'Gast'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Render the main page with the current username
 | 
				
			||||||
 | 
					    return render_template('index.html', user_name=user_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route('/users', methods=['GET'])
 | 
					@app.route('/users', methods=['GET'])
 | 
				
			||||||
def get_users():
 | 
					def get_users():
 | 
				
			||||||
 | 
					    # Query all users from the database
 | 
				
			||||||
    users = User.query.all()
 | 
					    users = User.query.all()
 | 
				
			||||||
    return jsonify([user.username for user in users])
 | 
					    # Create a list of dictionaries with user information
 | 
				
			||||||
 | 
					    user_list = [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": user.id,
 | 
				
			||||||
 | 
					            "username": user.username,
 | 
				
			||||||
 | 
					            "email": user.email,
 | 
				
			||||||
 | 
					            "password": user.password
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        for user in users
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    # Return the list of users as a JSON response
 | 
				
			||||||
 | 
					    return jsonify(user_list)
 | 
				
			||||||
 | 
					    #return user_list[0]['username']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route('/users', methods=['POST'])
 | 
					@app.route('/users', methods=['POST'])
 | 
				
			||||||
def create_user():
 | 
					def create_user():
 | 
				
			||||||
 | 
					    # Get the JSON data from the request body
 | 
				
			||||||
    data = request.get_json()
 | 
					    data = request.get_json()
 | 
				
			||||||
    new_user = User(username=data['username'], email=data['email'])
 | 
					    # Create a new User object with the provided username, email, and password
 | 
				
			||||||
 | 
					    new_user = User(username=data['username'], email=data['email'], password=data['password'])
 | 
				
			||||||
 | 
					    # Add the new user to the database session
 | 
				
			||||||
    db.session.add(new_user)
 | 
					    db.session.add(new_user)
 | 
				
			||||||
 | 
					    # Commit the transaction to save the new user in the database
 | 
				
			||||||
    db.session.commit()
 | 
					    db.session.commit()
 | 
				
			||||||
 | 
					    # Return a success message with status code 201 (Created)
 | 
				
			||||||
    return jsonify({'message': 'User created'}), 201
 | 
					    return jsonify({'message': 'User created'}), 201
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								lernplattform/static/images/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lernplattform/static/images/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 403 KiB  | 
@@ -3,29 +3,49 @@
 | 
				
			|||||||
    <head>
 | 
					    <head>
 | 
				
			||||||
        <meta charset="UTF-8" />
 | 
					        <meta charset="UTF-8" />
 | 
				
			||||||
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
				
			||||||
        <title>Social Media Layout</title>
 | 
					        <title>Lernplattform EMT/Paramedic</title>
 | 
				
			||||||
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
 | 
					        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
 | 
				
			||||||
        <style>
 | 
					        <style>
 | 
				
			||||||
 | 
					            :root {
 | 
				
			||||||
 | 
					                --primary-color: #102037; /* Definieren Sie die primäre Farbe */
 | 
				
			||||||
 | 
					                --secondary-color: #f78b47; /* Definieren Sie die sekundäre Farbe */
 | 
				
			||||||
 | 
					                --link-default-color: #ffffff; /* Definieren Sie die Link-Hover-Farbe */
 | 
				
			||||||
 | 
					                --link-hover-color: #ffcc00; /* Definieren Sie die Link-Hover-Farbe */
 | 
				
			||||||
 | 
					                --link-active-color: #ffcc00; /* Definieren Sie die Link-Hover-Farbe */
 | 
				
			||||||
 | 
					                --background-color: #d4c4c4; /* Definieren Sie die Hintergrundfarbe */
 | 
				
			||||||
 | 
					                --nav-background-color: #102037; /* Definieren Sie die Hintergrundfarbe */
 | 
				
			||||||
 | 
					                --box-background-color: #102037;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            body {
 | 
				
			||||||
 | 
					                color: #ffffff;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .light {
 | 
				
			||||||
 | 
					                color: #888888;
 | 
				
			||||||
 | 
					                font-weight: 100;
 | 
				
			||||||
 | 
					                font-size: small;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            .sidebar {
 | 
					            .sidebar {
 | 
				
			||||||
                height: 100%;
 | 
					                height: 100%;
 | 
				
			||||||
                position: sticky;
 | 
					                position: sticky;
 | 
				
			||||||
                top: 0;
 | 
					                top: 0;
 | 
				
			||||||
                background-color: #f0f2f5;
 | 
					                background-color: var(--background-color);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            .main-content {
 | 
					            .main-content {
 | 
				
			||||||
                background-color: #f0f2f5;
 | 
					                background-color: var(--background-color);
 | 
				
			||||||
                padding: 20px;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            .profile-card,
 | 
					            .profile-card,
 | 
				
			||||||
            .story,
 | 
					            .story,
 | 
				
			||||||
            .post,
 | 
					            .post,
 | 
				
			||||||
            .who-to-follow,
 | 
					            .who-to-follow,
 | 
				
			||||||
            .news {
 | 
					            .news {
 | 
				
			||||||
                background-color: #ffffff;
 | 
					                background-color: var(--box-background-color);
 | 
				
			||||||
                padding: 20px;
 | 
					                padding: 20px;
 | 
				
			||||||
                border-radius: 15px;
 | 
					                border-radius: 15px;
 | 
				
			||||||
                margin-bottom: 20px;
 | 
					                margin-bottom: 20px;
 | 
				
			||||||
                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
 | 
					                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .headbar {
 | 
				
			||||||
 | 
					                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            .profile-card img,
 | 
					            .profile-card img,
 | 
				
			||||||
            .who-to-follow img {
 | 
					            .who-to-follow img {
 | 
				
			||||||
@@ -48,64 +68,59 @@
 | 
				
			|||||||
            .who-to-follow button {
 | 
					            .who-to-follow button {
 | 
				
			||||||
                border-radius: 20px;
 | 
					                border-radius: 20px;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            .navbar,
 | 
					            .navbar {
 | 
				
			||||||
            footer,
 | 
					                background-color: var(--nav-background-color);
 | 
				
			||||||
 | 
					                padding: 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .navbar-nav .nav-link {
 | 
				
			||||||
 | 
					                color: var(--link-default-color)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            .navbar-nav .nav-link:hover {
 | 
				
			||||||
 | 
					                color: var(--link-hover-color);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            .navbar-nav .nav-link.active {
 | 
				
			||||||
 | 
					                color: var(--link-active-color);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .logo {
 | 
				
			||||||
 | 
					                display:inline;
 | 
				
			||||||
 | 
					                width: 50px;
 | 
				
			||||||
 | 
					                margin: 0;
 | 
				
			||||||
 | 
					                padding: 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            .footer {
 | 
				
			||||||
 | 
					                background-color: var(--nav-background-color);
 | 
				
			||||||
 | 
					                padding: 0;
 | 
				
			||||||
 | 
					                box-shadow: 0 -4px 8px rgba(0, 0, 0, 0.3);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            body {
 | 
					            body {
 | 
				
			||||||
                background-color: #f0f2f5;
 | 
					                background-color: var(--background-color);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        </style>
 | 
					        </style>
 | 
				
			||||||
    </head>
 | 
					    </head>
 | 
				
			||||||
    <body>
 | 
					    <body>
 | 
				
			||||||
        <nav class="navbar navbar-expand-lg navbar-light bg-white shadow-sm mb-3">
 | 
					
 | 
				
			||||||
            <div class="container-fluid">
 | 
					        {% include 'nav.html' %}
 | 
				
			||||||
                <a class="navbar-brand" href="#"><img src="https://via.placeholder.com/30" alt="Logo" /></a>
 | 
					 | 
				
			||||||
                <button
 | 
					 | 
				
			||||||
                    class="navbar-toggler"
 | 
					 | 
				
			||||||
                    type="button"
 | 
					 | 
				
			||||||
                    data-bs-toggle="collapse"
 | 
					 | 
				
			||||||
                    data-bs-target="#navbarNav"
 | 
					 | 
				
			||||||
                    aria-controls="navbarNav"
 | 
					 | 
				
			||||||
                    aria-expanded="false"
 | 
					 | 
				
			||||||
                    aria-label="Toggle navigation">
 | 
					 | 
				
			||||||
                    <span class="navbar-toggler-icon"></span>
 | 
					 | 
				
			||||||
                </button>
 | 
					 | 
				
			||||||
                <div class="collapse navbar-collapse" id="navbarNav">
 | 
					 | 
				
			||||||
                    <ul class="navbar-nav me-auto mb-2 mb-lg-0">
 | 
					 | 
				
			||||||
                        <li class="nav-item">
 | 
					 | 
				
			||||||
                            <a class="nav-link active" aria-current="page" href="#">Demo</a>
 | 
					 | 
				
			||||||
                        </li>
 | 
					 | 
				
			||||||
                        <li class="nav-item">
 | 
					 | 
				
			||||||
                            <a class="nav-link" href="#">Pages</a>
 | 
					 | 
				
			||||||
                        </li>
 | 
					 | 
				
			||||||
                        <li class="nav-item">
 | 
					 | 
				
			||||||
                            <a class="nav-link" href="#">Account</a>
 | 
					 | 
				
			||||||
                        </li>
 | 
					 | 
				
			||||||
                        <li class="nav-item">
 | 
					 | 
				
			||||||
                            <a class="nav-link" href="#">My Network</a>
 | 
					 | 
				
			||||||
                        </li>
 | 
					 | 
				
			||||||
                    </ul>
 | 
					 | 
				
			||||||
                    <form class="d-flex">
 | 
					 | 
				
			||||||
                        <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
 | 
					 | 
				
			||||||
                    </form>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </nav>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="container-fluid">
 | 
					        <div class="container-fluid">
 | 
				
			||||||
            <div class="row">
 | 
					            <div class="row">
 | 
				
			||||||
                <!-- Sidebar -->
 | 
					                <!-- Sidebar -->
 | 
				
			||||||
                <div class="col-12 col-md-3 sidebar mb-3">
 | 
					                <div class="col-12 col-md-3 sidebar mb-3">
 | 
				
			||||||
                    <div class="profile-card text-center p-3">
 | 
					                    <div class="profile-card text-center p-3">
 | 
				
			||||||
                        <img src="https://via.placeholder.com/100" alt="Profile Picture" />
 | 
					                        <!--<img src="https://via.placeholder.com/100" alt="Profile Picture" />-->
 | 
				
			||||||
                        <h5>Sam Lanson</h5>
 | 
					                        <h5>{{ user_name }}</h5>
 | 
				
			||||||
                        <p>Web Developer at Webestica</p>
 | 
					                        <p>Web Developer at Webestica</p>
 | 
				
			||||||
                        <p class="text-muted">I'd love to change the world, but they won’t give me the source code.</p>
 | 
					                        <p class="light">I'd love to change the world, but they won’t give me the source code.</p>
 | 
				
			||||||
                        <div class="d-flex justify-content-around">
 | 
					                        <div class="d-flex justify-content-around">
 | 
				
			||||||
                            <span>256 Posts</span>
 | 
					                            <span>256 Posts</span>
 | 
				
			||||||
                            <span>2.5K Followers</span>
 | 
					                            <span>2.5K Followers</span>
 | 
				
			||||||
                            <span>365 Following</span>
 | 
					                            <span>365 Following</span>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
                    <div class="list-group">
 | 
					                    <div class="list-group">
 | 
				
			||||||
                        <a href="#" class="list-group-item list-group-item-action">Feed</a>
 | 
					                        <a href="#" class="list-group-item list-group-item-action">Feed</a>
 | 
				
			||||||
                        <a href="#" class="list-group-item list-group-item-action">Connections</a>
 | 
					                        <a href="#" class="list-group-item list-group-item-action">Connections</a>
 | 
				
			||||||
@@ -115,12 +130,15 @@
 | 
				
			|||||||
                        <a href="#" class="list-group-item list-group-item-action">Notifications</a>
 | 
					                        <a href="#" class="list-group-item list-group-item-action">Notifications</a>
 | 
				
			||||||
                        <a href="#" class="list-group-item list-group-item-action">Settings</a>
 | 
					                        <a href="#" class="list-group-item list-group-item-action">Settings</a>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <!-- Main Content -->
 | 
					                <!-- Main Content -->
 | 
				
			||||||
                <div class="col-12 col-md-6 main-content mb-3">
 | 
					                <div class="col-12 col-md-6 main-content mb-3">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <!-- Post a Story -->
 | 
					                    <!-- Post a Story -->
 | 
				
			||||||
                    <div class="story p-3 shadow-sm">
 | 
					<!--
 | 
				
			||||||
 | 
					                    <div class="story p-3">
 | 
				
			||||||
                        <div class="d-flex align-items-center">
 | 
					                        <div class="d-flex align-items-center">
 | 
				
			||||||
                            <img
 | 
					                            <img
 | 
				
			||||||
                                src="https://via.placeholder.com/50"
 | 
					                                src="https://via.placeholder.com/50"
 | 
				
			||||||
@@ -135,19 +153,23 @@
 | 
				
			|||||||
                            <button class="btn btn-outline-primary">Feeling/Activity</button>
 | 
					                            <button class="btn btn-outline-primary">Feeling/Activity</button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <!-- Posts -->
 | 
					                    <!-- Posts -->
 | 
				
			||||||
                    <div class="post p-3 shadow-sm">
 | 
					                    <div class="post p-3">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        <div class="d-flex">
 | 
					                        <div class="d-flex">
 | 
				
			||||||
                            <img
 | 
					                            <img
 | 
				
			||||||
                                src="https://via.placeholder.com/50"
 | 
					                                src="../static/images/logo.png"
 | 
				
			||||||
                                class="rounded-circle me-3"
 | 
					                                class="rounded-circle me-3"
 | 
				
			||||||
 | 
					                                style="width: 300px;"
 | 
				
			||||||
                                alt="Profile Picture" />
 | 
					                                alt="Profile Picture" />
 | 
				
			||||||
                            <div>
 | 
					                            <div>
 | 
				
			||||||
                                <h6>Lori Ferguson</h6>
 | 
					                                <h6>Lernplattform für <br>Rettungs- und Notfallsanitäter</h6>
 | 
				
			||||||
                                <small class="text-muted">Web Developer at Webestica • 2hr</small>
 | 
					                                <small class="light">Hier kann man lernen und üben, Wiessen festigen und sich aktiv an der Datenbank beteiligen.</small>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        <p class="mt-3">
 | 
					                        <p class="mt-3">
 | 
				
			||||||
                            I'm thrilled to share that I've completed a graduate certificate course in project
 | 
					                            I'm thrilled to share that I've completed a graduate certificate course in project
 | 
				
			||||||
                            management with the president's honor roll.
 | 
					                            management with the president's honor roll.
 | 
				
			||||||
@@ -159,16 +181,16 @@
 | 
				
			|||||||
                <!-- Right Sidebar -->
 | 
					                <!-- Right Sidebar -->
 | 
				
			||||||
                <div class="col-12 col-md-3 mb-3">
 | 
					                <div class="col-12 col-md-3 mb-3">
 | 
				
			||||||
                    <!-- Who to Follow -->
 | 
					                    <!-- Who to Follow -->
 | 
				
			||||||
                    <div class="who-to-follow p-3 shadow-sm">
 | 
					                    <div class="who-to-follow p-3">
 | 
				
			||||||
                        <h6>Who to follow</h6>
 | 
					                        <h6>Lernfelder</h6>
 | 
				
			||||||
                        <div class="d-flex align-items-center my-2">
 | 
					                        <div class="d-flex align-items-center my-2">
 | 
				
			||||||
                            <img
 | 
					                            <img
 | 
				
			||||||
                                src="https://via.placeholder.com/50"
 | 
					                                src="https://via.placeholder.com/50"
 | 
				
			||||||
                                class="rounded-circle me-3"
 | 
					                                class="rounded-circle me-3"
 | 
				
			||||||
                                alt="Profile Picture" />
 | 
					                                alt="Profile Picture" />
 | 
				
			||||||
                            <div>
 | 
					                            <div>
 | 
				
			||||||
                                <h6 class="mb-0">Judy Nguyen</h6>
 | 
					                                <h6 class="mb-0">Anatomie</h6>
 | 
				
			||||||
                                <small class="text-muted">News anchor</small>
 | 
					                                <small class="light">RettSan</small>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
					                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@@ -178,8 +200,8 @@
 | 
				
			|||||||
                                class="rounded-circle me-3"
 | 
					                                class="rounded-circle me-3"
 | 
				
			||||||
                                alt="Profile Picture" />
 | 
					                                alt="Profile Picture" />
 | 
				
			||||||
                            <div>
 | 
					                            <div>
 | 
				
			||||||
                                <h6 class="mb-0">Amanda Reed</h6>
 | 
					                                <h6 class="mb-0">Medikamente</h6>
 | 
				
			||||||
                                <small class="text-muted">Web Developer</small>
 | 
					                                <small class="light">NotSan</small>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
					                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@@ -189,31 +211,28 @@
 | 
				
			|||||||
                                class="rounded-circle me-3"
 | 
					                                class="rounded-circle me-3"
 | 
				
			||||||
                                alt="Profile Picture" />
 | 
					                                alt="Profile Picture" />
 | 
				
			||||||
                            <div>
 | 
					                            <div>
 | 
				
			||||||
                                <h6 class="mb-0">Billy Vasquez</h6>
 | 
					                                <h6 class="mb-0">Herzkreislauf</h6>
 | 
				
			||||||
                                <small class="text-muted">News anchor</small>
 | 
					                                <small class="light">RettSan</small>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
					                            <button class="btn btn-outline-primary ms-auto">+</button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="text-center mt-3">
 | 
					                        <div class="text-center mt-3">
 | 
				
			||||||
                            <button class="btn btn-link">View more</button>
 | 
					                            <button class="btn btn-link">Mehr Lernfelder</button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <!-- Today's News -->
 | 
					                    <!-- Today's News -->
 | 
				
			||||||
                    <div class="news p-3 shadow-sm">
 | 
					                    <div class="news p-3">
 | 
				
			||||||
                        <h6>Today's news</h6>
 | 
					                        <h6>Datenbank - Inhalte</h6>
 | 
				
			||||||
                        <ul class="list-unstyled">
 | 
					                        <ul class="list-unstyled">
 | 
				
			||||||
                            <li class="mb-2">
 | 
					                            <li class="mb-2">
 | 
				
			||||||
                                Ten questions you should answer truthfully <small class="text-muted">2hr</small>
 | 
					                                Lernfelder <small class="light">3</small>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li class="mb-2">
 | 
					                            <li class="mb-2">
 | 
				
			||||||
                                Five unbelievable facts about money <small class="text-muted">3hr</small>
 | 
					                                Fragen RettSan <small class="light">38</small>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li class="mb-2">
 | 
					                            <li class="mb-2">
 | 
				
			||||||
                                Best Pinterest Boards for learning about business <small class="text-muted">4hr</small>
 | 
					                                Fragen NotSan <small class="light">40</small>
 | 
				
			||||||
                            </li>
 | 
					 | 
				
			||||||
                            <li class="mb-2">
 | 
					 | 
				
			||||||
                                Skills that you can learn from ... <small class="text-muted">4hr</small>
 | 
					 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                        </ul>
 | 
					                        </ul>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
@@ -221,9 +240,9 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <footer class="bg-white text-center py-3 shadow-sm mt-3">
 | 
					        <footer class="footer text-center py-3 mt-3">
 | 
				
			||||||
            <div class="container">
 | 
					            <div class="container">
 | 
				
			||||||
                <small>© 2024 Webestica. Alle Rechte vorbehalten.</small>
 | 
					                <small>© 2024 Manuel Weiser. Alle Rechte vorbehalten.</small>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </footer>
 | 
					        </footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								lernplattform/templates/nav.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lernplattform/templates/nav.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					<nav class="navbar navbar-expand-lg navbar-light shadow-sm mb-3">
 | 
				
			||||||
 | 
					            <div class="container-fluid headbar">
 | 
				
			||||||
 | 
					                <a class="navbar-brand" href="/"><img src="../static/images/logo.png" alt="EMT Paramedic Learn" class="logo" /></a>
 | 
				
			||||||
 | 
					                <button
 | 
				
			||||||
 | 
					                    class="navbar-toggler"
 | 
				
			||||||
 | 
					                    type="button"
 | 
				
			||||||
 | 
					                    data-bs-toggle="collapse"
 | 
				
			||||||
 | 
					                    data-bs-target="#navbarNav"
 | 
				
			||||||
 | 
					                    aria-controls="navbarNav"
 | 
				
			||||||
 | 
					                    aria-expanded="false"
 | 
				
			||||||
 | 
					                    aria-label="Toggle navigation">
 | 
				
			||||||
 | 
					                    <span class="navbar-toggler-icon"></span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                <div class="collapse navbar-collapse" id="navbarNav">
 | 
				
			||||||
 | 
					                    <ul class="navbar-nav me-auto mb-2 mb-lg-0">
 | 
				
			||||||
 | 
					                        <li class="nav-item">
 | 
				
			||||||
 | 
					                            <a class="nav-link active" aria-current="page" href="/">Start</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li class="nav-item">
 | 
				
			||||||
 | 
					                            <a class="nav-link" href="#">Lernfelder</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li class="nav-item">
 | 
				
			||||||
 | 
					                            <a class="nav-link" href="#">Account</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li class="nav-item">
 | 
				
			||||||
 | 
					                            <a class="nav-link" href="#">Impressum</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                    </ul>
 | 
				
			||||||
 | 
					                    <form class="d-flex">
 | 
				
			||||||
 | 
					                        <input class="form-control me-2" type="search" placeholder="Suche" aria-label="Suche" />
 | 
				
			||||||
 | 
					                    </form>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
from lernplattform import app
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    app.run()
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user