Гитхаб: https://github.com/Sokhavuth/телеканал
Версель:

Чтобы создать и использовать переменные среды в нашем проекте, нам нужно установить для этого пакет, например, python-dotenv.

pip install python-dotenv
Войти в полноэкранный режим

Выйти из полноэкранного режима

Что касается базы данных, мы могли бы использовать MongoDB Atlas. Если у нас уже есть учетная запись в этой современной базе данных, мы могли бы создать переменную среды для URL-адреса этой базы данных и подключиться к ней с помощью переменной среды.

Однако для бесперебойной работы Python с MongoDB Atlas нам необходимо установить пакет pymongo.

pip install pymongo
Войти в полноэкранный режим

Выйти из полноэкранного режима

Чтобы создать и сохранить сеанс пользователя, мы можем использовать базу данных Redis, создав учетную запись с Редис Энтерпрайз платформу и установку пакета Redis для Python.

pip install redis
Войти в полноэкранный режим

Выйти из полноэкранного режима

Еще одна вещь: для аутентификации пользователя мы можем использовать JSON Web Token (JWT), установив пакет PyJWT.

pip install PyJWT
Войти в полноэкранный режим

Выйти из полноэкранного режима

Когда все установлено, мы можем создать файл конфигурации для настройки и настройки соединений с базой данных.

# config.py
# pip install python-dotenv
# pip install PyJWT
# pip install pymongo
# pip install redis


def settings():
    setup = {
        "siteTitle": "TV Channel",
        "pageTitle": "",
    }

    return setup


import os
from dotenv import load_dotenv
load_dotenv()
secret_key = os.getenv("SECRET_KEY")


import pymongo
client = pymongo.MongoClient(os.getenv("DATABASE_URI"))
db = client[os.getenv("DB_NAME")]


import redis
redis = redis.Redis(
    host = os.getenv("REDIS_URI"),
    port = int(os.getenv("REDIS_PORT")), 
    password = os.getenv("REDIS_PASSWORD")
)


configure = { 
    "settings": settings, 
    "secret_key": secret_key, 
    "db": db, 
    "redis": redis,
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

# .env

SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DATABASE_URI=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DB_NAME=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REDIS_URI=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REDIS_PASSWORD=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REDIS_PORT=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы можем импортировать конфигурацию из вышеуказанного файла в другой модуль. Однако лучше всего хранить объект конфигурации в основном объекте приложения. Таким образом, мы можем использовать эту конфигурацию в любом модуле через объект запроса.

# index.py

from bottle import static_file, get
from routes.frontend import index
import config


app = index.appIndex
app.config["myapp.config"] = config.configure

@app.get('/static/<filepath:path>')
def staticFile(filepath):
    return static_file(filepath, root="public")


###################################################################
import socket
host = socket.getfqdn()    
addr = socket.gethostbyname(host)
if(addr == '127.0.1.1'):
    app.run(host='localhost', port=8000, debug=True, reloader=True)

###################################################################
Войти в полноэкранный режим

Выйти из полноэкранного режима

# routes/frontend/index.py

from bottle import Bottle, template, get, request
from copy import deepcopy


appIndex = Bottle()

@appIndex.get("https://dev.to/")
def indexHandler():
    config = request.app.config["myapp.config"]
    settings = deepcopy(config["settings"])
    setup = settings()
    setup["message"] = "Hello World!"

    return template('base', data=setup)

Войти в полноэкранный режим

Выйти из полноэкранного режима

<!--views/base.tpl-->

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        <title>{{ data["siteTitle"] }}</title>
        <script src="/static/scripts/jquery.js"></script>
        <link href="/static/images/sitelogo.png" rel="icon" />
        <link href="/static/fonts/setup.css" rel="stylesheet" />
        <link href="/static/styles/base.css" rel="stylesheet" />
    </head>
    <body>
        {{ data["message"] }}
    </body>
</html>
Войти в полноэкранный режим

Выйти из полноэкранного режима