AnswerHub — это веб-платформа вопросов и ответов, построенная на Django. Пользователи могут задавать вопросы, отвечать на них, использовать теги для категоризации и искать по существующему контенту.
- Python 3.10 или выше
- PostgreSQL 14 или выше (если запускаете без Docker)
- Docker и Docker Compose (для запуска в контейнерах)
- Клонируйте репозиторий:
git clone https://github.com/virsi/AnswerHub.git
cd AnswerHub- Создайте файл
.envиз примера:
cp .env.example .env- Отредактируйте
.env, установив безопасныйSECRET_KEYи желаемые параметры PostgreSQL:
SECRET_KEY=your-secure-secret-key-here
POSTGRES_DB=answerhub
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your-secure-password
POSTGRES_HOST=db
POSTGRES_PORT=5432- Запустите проект через Docker Compose:
docker-compose up -d- Создайте суперпользователя:
docker-compose exec web python manage.py createsuperuserТеперь приложение доступно по адресу: http://localhost:8000
- Клонируйте репозиторий:
git clone https://github.com/virsi/AnswerHub.git
cd AnswerHub- Создайте и активируйте виртуальное окружение:
python -m venv venv
source venv/bin/activate # для Linux/MacOS
# или
venv\\Scripts\\activate # для Windows- Установите зависимости:
pip install -r requirements.txt- Создайте файл
.envиз примера и настройте его:
cp .env.example .env
# Отредактируйте .env, указав корректные параметры подключения к вашей PostgreSQL- Примените миграции:
python manage.py migrate- Создайте суперпользователя:
python manage.py createsuperuser- Соберите статические файлы:
python manage.py collectstatic- Запустите сервер разработки:
python manage.py runserverПриложение будет доступно по адресу: http://localhost:8000
Если у вас есть существующие данные в SQLite, вы можете перенести их в PostgreSQL:
- Создайте дамп данных из SQLite:
python manage.py dumpdata --natural-foreign --natural-primary --exclude contenttypes --exclude auth.permission --indent 2 > data.json --settings=AnswerHub.settings_sqlite- Убедитесь, что PostgreSQL настроен и миграции применены:
python manage.py migrate # или docker-compose exec web python manage.py migrate- Загрузите данные в PostgreSQL:
python manage.py loaddata data.json # или docker-compose exec web python manage.py loaddata data.jsonAnswerHub/- основная директория проекта с настройкамиquestions/- приложение для работы с вопросамиanswers/- приложение для работы с ответамиusers/- пользовательское приложениеtags/- приложение для работы с тегамиstatic/- статические файлы (CSS, JavaScript, изображения)templates/- HTML шаблоныuploads/- загружаемые пользователями файлы
- Создайте ветку для новой функциональности:
git checkout -b feature/your-feature-name- Внесите изменения и создайте коммит:
git add .
git commit -m "Добавлена новая функциональность"- Отправьте изменения в репозиторий:
git push origin feature/your-feature-nameЗапуск тестов:
python manage.py test
## Наполнение тестовыми данными
В проект добавлена management command `fill_db` для заполнения БД большим количеством тестовых записей.
Пример использования:
```bash
python manage.py fill_db 100Аргумент ratio задаёт базовый коэффициент заполнения:
- пользователей — ratio
- вопросов — ratio * 10
- ответов — ratio * 100
- тегов — ratio
- оценок (вопросы + ответы) — ratio * 200
ВНИМАНИЕ: при больших значениях команда создаёт большое количество записей и может занять много времени и место на диске. Рекомендуется запускать сначала с небольшим ratio (например, 1 или 5) и убедиться, что всё работает корректно.
### Полезные команды Docker
- Просмотр логов: `docker-compose logs -f`
- Перезапуск сервисов: `docker-compose restart`
- Остановка: `docker-compose down`
- Пересборка: `docker-compose up -d --build`
### Работа с базой данных
- Создание новых миграций: `python manage.py makemigrations`
- Просмотр статуса миграций: `python manage.py showmigrations`
- Доступ к PostgreSQL в контейнере: `docker-compose exec db psql -U postgres`
## Возможные проблемы
1. **Ошибка подключения к базе данных**
- Убедитесь, что PostgreSQL запущен
- Проверьте параметры подключения в `.env`
- При использовании Docker проверьте, что контейнер `db` работает
2. **Статические файлы не отображаются**
- Выполните `python manage.py collectstatic`
- Проверьте настройки `STATIC_URL` и `STATIC_ROOT` в `settings.py`
3. **Ошибки при миграции данных**
- Убедитесь, что все зависимости установлены
- Проверьте совместимость версий данных
- При необходимости выполните миграцию поэтапно
## Лицензия
[MIT License](LICENSE)
## Автор
[virsi](https://github.com/virsi)
