feat: initial Flask skeleton with PostgreSQL
This commit is contained in:
commit
a1b966a22b
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
venv/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
0
app/__init__.py
Normal file
0
app/__init__.py
Normal file
12
app/config.py
Normal file
12
app/config.py
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
POSTGRES_USER = os.getenv("POSTGRES_USER", "morozovka")
|
||||||
|
POSTGRES_PASSWORD = os.getenv("POSTGRES_PASSWORD", "rf-slf-1945")
|
||||||
|
POSTGRES_DB = os.getenv("POSTGRES_DB", "morozovka_portal")
|
||||||
|
POSTGRES_HOST = os.getenv("POSTGRES_HOST", "127.0.0.1")
|
||||||
|
POSTGRES_PORT = os.getenv("POSTGRES_PORT", "5432")
|
||||||
|
|
||||||
|
DATABASE_URL = f"postgresql+psycopg2://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DB}"
|
||||||
8
app/db.py
Normal file
8
app/db.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
from sqlmodel import SQLModel, create_engine
|
||||||
|
from .config import DATABASE_URL
|
||||||
|
|
||||||
|
engine = create_engine(DATABASE_URL, echo=False)
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
"""Создает все таблицы в БД."""
|
||||||
|
SQLModel.metadata.create_all(engine)
|
||||||
18
app/main.py
Normal file
18
app/main.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
from flask import Flask, render_template, jsonify
|
||||||
|
from .db import init_db
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
# Инициализируем БД при старте (в будущем заменим на Alembic миграции)
|
||||||
|
with app.app_context():
|
||||||
|
init_db()
|
||||||
|
|
||||||
|
@app.route("/healthz")
|
||||||
|
def healthz():
|
||||||
|
"""Проверка жизнеспособности сервиса."""
|
||||||
|
return jsonify({"status": "ok", "service": "morozovka-portal"})
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def index():
|
||||||
|
"""Главная страница портала."""
|
||||||
|
return render_template("index.html")
|
||||||
3
app/models.py
Normal file
3
app/models.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from sqlmodel import SQLModel
|
||||||
|
|
||||||
|
# Здесь будут модели User, Project и т.д.
|
||||||
43
app/templates/index.html
Normal file
43
app/templates/index.html
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Morozovka Portal</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background: #0d1117;
|
||||||
|
color: #e6edf3;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background: linear-gradient(90deg, #58a6ff, #a371f7, #f778ba);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
p { color: #8b949e; }
|
||||||
|
.badge {
|
||||||
|
background: #238636;
|
||||||
|
color: white;
|
||||||
|
padding: 5px 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Morozovka Portal</h1>
|
||||||
|
<p>Скелет системы успешно запущен! (Flask Edition)</p>
|
||||||
|
<div class="badge">Stage 1.2: OK</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
16
requirements.txt
Normal file
16
requirements.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
annotated-types==0.8.0
|
||||||
|
blinker==1.9.0
|
||||||
|
click==8.5.0
|
||||||
|
Flask==3.1.3
|
||||||
|
gunicorn==26.2.0
|
||||||
|
itsdangerous==2.2.0
|
||||||
|
Jinja2==3.1.6
|
||||||
|
MarkupSafe==3.0.4
|
||||||
|
psycopg2-binary==2.9.13
|
||||||
|
pydantic==2.14.1
|
||||||
|
pydantic_core==2.50.1
|
||||||
|
SQLAlchemy==2.1.5
|
||||||
|
sqlmodel==0.0.48
|
||||||
|
typing-inspection==0.4.4
|
||||||
|
typing_extensions==4.16.0
|
||||||
|
Werkzeug==3.1.9
|
||||||
Loading…
Reference in New Issue
Block a user