fix: edit_row default {} → None (Jinja2 truthy bug), init_db with app_context, add README

This commit is contained in:
2026-07-20 10:48:49 +04:00
parent 13b7a41a02
commit 9c14f70bc4
2 changed files with 53 additions and 2 deletions
+50
View File
@@ -0,0 +1,50 @@
# Flask CRUD Example
CRUD-интерфейс на Flask + PostgreSQL. Аналог Lucee CRUD (`tfluceecrud`), работает с той же таблицей.
## Переменные окружения
| Переменная | По умолчанию | Назначение |
|-------------|---------------|---------------------------|
| `PGHOST` | `127.0.0.1` | Хост PostgreSQL |
| `PGPORT` | `5432` | Порт PostgreSQL |
| `PGDATABASE`| `postgres` | Имя БД |
| `PGUSER` | `postgres` | Пользователь |
| `PGPASSWORD`| (пусто) | Пароль |
| `TABLE_NAME`| `crud_items` | Имя таблицы (та же что у Lucee) |
| `PORT` | `5000` | Порт веб-сервера |
## Запуск
```bash
pip install -r requirements.txt
python app.py
```
Или через gunicorn:
```bash
gunicorn app:app -b 0.0.0.0:5000
```
При старте: `CREATE TABLE IF NOT EXISTS`**не дропает** существующую таблицу.
## Структура
```
.
├── app.py # Flask приложение
├── requirements.txt # Flask, psycopg2-binary, gunicorn
├── static/
│ ├── logo.svg # Nubes логотип
│ ├── favicon.svg # Nudes иконка
│ └── style.css # Nubes дизайн-система
└── templates/
└── index.html # Jinja2 шаблон
```
## Безопасность
- Параметризованные запросы (`%s`) → защита от SQL-инъекций
- `redirect` после POST → защита от повторной отправки
- Jinja2 автоэкранирование → XSS-защита
+2 -1
View File
@@ -86,7 +86,7 @@ def index():
return redirect(url_for("index"))
# --- GET: список + форма редактирования ---
edit_row = {}
edit_row = None
edit_id = request.args.get("edit")
if edit_id:
cur.execute(
@@ -112,5 +112,6 @@ def index():
if __name__ == "__main__":
with app.app_context():
init_db()
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=False)