fix: edit_row default {} → None (Jinja2 truthy bug), init_db with app_context, add README
This commit is contained in:
@@ -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-защита
|
||||
@@ -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__":
|
||||
init_db()
|
||||
with app.app_context():
|
||||
init_db()
|
||||
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=False)
|
||||
|
||||
Reference in New Issue
Block a user