74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
from flask import Flask, render_template, request, jsonify
|
||
import psycopg2
|
||
import os
|
||
|
||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||
|
||
# Подключение к БД
|
||
def get_db_connection():
|
||
conn = psycopg2.connect(
|
||
host=os.getenv("DB_HOST"),
|
||
database=os.getenv("DB_NAME"),
|
||
user=os.getenv("DB_USER"),
|
||
password=os.getenv("DB_PASS"),
|
||
sslmode="require"
|
||
)
|
||
return conn
|
||
|
||
|
||
# Главная страница с HTML
|
||
@app.route("/")
|
||
def home():
|
||
conn = get_db_connection()
|
||
cur = conn.cursor()
|
||
cur.execute("SELECT id, name, created_at FROM users;")
|
||
users = cur.fetchall()
|
||
cur.close()
|
||
conn.close()
|
||
return render_template("index.html", users=users)
|
||
|
||
# API для добавления пользователя
|
||
@app.route("/add_user", methods=["POST"])
|
||
def add_user():
|
||
name = request.form.get("name")
|
||
if name:
|
||
conn = get_db_connection()
|
||
cur = conn.cursor()
|
||
cur.execute("INSERT INTO users (name) VALUES (%s) RETURNING id;", (name,))
|
||
user_id = cur.fetchone()[0]
|
||
conn.commit()
|
||
cur.close()
|
||
conn.close()
|
||
return jsonify({"id": user_id, "name": name}), 201
|
||
return jsonify({"error": "Имя не может быть пустым"}), 400
|
||
|
||
# API для удаления пользователя
|
||
@app.route("/delete_user/<int:user_id>", methods=["POST"])
|
||
def delete_user(user_id):
|
||
conn = get_db_connection()
|
||
cur = conn.cursor()
|
||
cur.execute("DELETE FROM users WHERE id = %s RETURNING id;", (user_id,))
|
||
deleted = cur.fetchone()
|
||
conn.commit()
|
||
cur.close()
|
||
conn.close()
|
||
if deleted:
|
||
return jsonify({"message": "Пользователь удален"})
|
||
return jsonify({"error": "Пользователь не найден"}), 404
|
||
|
||
# API для случайного пользователя
|
||
@app.route("/random_user")
|
||
def random_user():
|
||
conn = get_db_connection()
|
||
cur = conn.cursor()
|
||
cur.execute("SELECT id, name, created_at FROM users ORDER BY RANDOM() LIMIT 1;")
|
||
user = cur.fetchone()
|
||
cur.close()
|
||
conn.close()
|
||
if user:
|
||
return jsonify({"id": user[0], "name": user[1], "created_at": user[2].strftime('%Y-%m-%d %H:%M:%S')})
|
||
return jsonify({"error": "Нет пользователей"}), 404
|
||
|
||
if __name__ == "__main__":
|
||
app.run(host="0.0.0.0", port=5000, debug=True)
|