import json
import sqlite3
from flask import Flask, request, jsonify
app = Flask(__name__)
# Загрузка конфигурации из secret.json
with open('secret.json', 'r') as f:
config = json.load(f)
# Инициализация базы данных
conn = sqlite3.connect(config['filename'])
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS Features
(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, being TEXT, feature TEXT, importance INTEGER)''')
conn.commit()
# Маршрут для добавления нового имени
@app.route('/add_name', methods=['POST'])
def add_name():
data = request.get_json()
name = data.get('name')
being = data.get('being')
feature = data.get('feature')
importance = data.get('importance', config['least_imp'])
if not name or not being or not feature:
return jsonify({'error': 'Недостаточно данных'}), 400
c.execute("INSERT INTO Features (name, being, feature, importance) VALUES (?, ?, ?, ?)",
(name, being, feature, importance))
conn.commit()
return jsonify({'message': 'Имя успешно добавлено'}), 200
# Маршрут для получения списка существ
@app.route('/beings', methods=['GET'])
def get_beings():
beings = []
for being in config['types']:
c.execute("SELECT name, feature, importance FROM Features WHERE being=?", (being,))
beings.append({
'being': being,
'names': [{'name': row[0], 'feature': row[1], 'importance': row[2]} for row in c.fetchall()]
})
return jsonify(beings)
if __name__ == '__main__':
app.run(debug=True)
Использование
Создайте файл secret.json со следующим содержимым:
{
"filename": "database.db",
"types": ["human", "animal", "plant"],
"least_imp": 1
}
Запустите приложение Flask:
python app.py
Используйте следующие маршруты для взаимодействия с приложением:
POST /add_name: Добавляет новое имя в базу данных. Требуется JSON-тело с полями name, being и feature. Поле importance является необязательным и по умолчанию равно least_imp из конфигурации.
GET /beings: Возвращает список всех существ и связанных с ними имен, особенностей и важностей.
В файле secret.json записан словарь с ключами
filename (имя файла базы данных);
types (список типов существ);
least_imp (наименьшая важность).
В БД находится таблица Features с полями:
id, name, being, feature, importance
id, имя, тип существа, особенность, важность