mirror of
https://github.com/EDeev/web-dev.git
synced 2026-06-17 05:21:01 +03:00
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
"""
|
||
Инициализация БД: создание таблиц, ролей, жанров и тестовых пользователей.
|
||
Запускать: python db_seed.py
|
||
"""
|
||
import sqlite3
|
||
import os
|
||
from werkzeug.security import generate_password_hash
|
||
|
||
DB = os.path.join(os.path.dirname(__file__), 'library.db')
|
||
SCHEMA = os.path.join(os.path.dirname(__file__), 'schema.sql')
|
||
|
||
|
||
def init():
|
||
conn = sqlite3.connect(DB)
|
||
conn.row_factory = sqlite3.Row
|
||
conn.execute('PRAGMA foreign_keys = ON')
|
||
|
||
with open(SCHEMA, encoding='utf-8') as f:
|
||
conn.executescript(f.read())
|
||
|
||
# Роли
|
||
roles = [
|
||
('администратор', 'Суперпользователь, полный доступ'),
|
||
('модератор', 'Может редактировать книги и модерировать рецензии'),
|
||
('пользователь', 'Может оставлять рецензии'),
|
||
]
|
||
for name, desc in roles:
|
||
conn.execute(
|
||
'INSERT OR IGNORE INTO roles (name, description) VALUES (?,?)',
|
||
(name, desc)
|
||
)
|
||
|
||
# Жанры
|
||
genres = [
|
||
'Фантастика', 'Фэнтези', 'Детектив', 'Роман', 'Приключения',
|
||
'Ужасы', 'Исторический', 'Научная литература', 'Биография', 'Поэзия'
|
||
]
|
||
for g in genres:
|
||
conn.execute('INSERT OR IGNORE INTO genres (name) VALUES (?)', (g,))
|
||
|
||
# Тестовые пользователи
|
||
users = [
|
||
('admin', 'admin123', 'Деев', 'Егор', 'Викторович', 'администратор'),
|
||
('moder', 'moder123', 'Иванов', 'Иван', 'Иванович', 'модератор'),
|
||
('user1', 'user123', 'Петров', 'Пётр', None, 'пользователь'),
|
||
]
|
||
for login, pwd, last, first, middle, role_name in users:
|
||
role = conn.execute('SELECT id FROM roles WHERE name=?', (role_name,)).fetchone()
|
||
if role:
|
||
conn.execute(
|
||
'''INSERT OR IGNORE INTO users
|
||
(login, password_hash, last_name, first_name, middle_name, role_id)
|
||
VALUES (?,?,?,?,?,?)''',
|
||
(login, generate_password_hash(pwd), last, first, middle, role['id'])
|
||
)
|
||
|
||
conn.commit()
|
||
conn.close()
|
||
print('БД инициализирована.')
|
||
print('Логины: admin/admin123, moder/moder123, user1/user123')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
init()
|