{"id":31693811,"url":"https://github.com/jkl2thebest/quote-service-django","last_synced_at":"2026-05-18T06:02:27.324Z","repository":{"id":301941463,"uuid":"1010730511","full_name":"JKL2theBest/quote-service-django","owner":"JKL2theBest","description":"Django web app that shows weighted random quotes with likes, views, and top quotes dashboard.","archived":false,"fork":false,"pushed_at":"2025-09-21T14:51:32.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T15:53:37.809Z","etag":null,"topics":["database-management","django","django-framework","python","python-data-structures","pythonanywhere","qa","testing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JKL2theBest.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-29T17:27:16.000Z","updated_at":"2025-09-21T14:51:35.000Z","dependencies_parsed_at":"2025-06-29T18:45:54.992Z","dependency_job_id":null,"html_url":"https://github.com/JKL2theBest/quote-service-django","commit_stats":null,"previous_names":["jkl2thebest/quote-service-django"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JKL2theBest/quote-service-django","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fquote-service-django","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fquote-service-django/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fquote-service-django/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fquote-service-django/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JKL2theBest","download_url":"https://codeload.github.com/JKL2theBest/quote-service-django/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fquote-service-django/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33167430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T05:43:36.989Z","status":"ssl_error","status_checked_at":"2026-05-18T05:43:19.133Z","response_time":71,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database-management","django","django-framework","python","python-data-structures","pythonanywhere","qa","testing"],"created_at":"2025-10-08T15:53:18.993Z","updated_at":"2026-05-18T06:02:27.291Z","avatar_url":"https://github.com/JKL2theBest.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quote Service\n\nВеб-приложение на Django, которое отображает случайные цитаты из фильмов и книг.\n\n**Ссылка на развернутое приложение:** [https://JKL2.pythonanywhere.com](https://JKL2.pythonanywhere.com) - *уже неактульно*\n\n## Основные возможности\n\n*   **Взвешенная случайная выдача:** Главная страница показывает случайную цитату с учетом ее \"веса\". Реализовано с оптимальным использованием памяти через `values_list`.\n*   **Дашборд:** Вместо простого топа-10, страница `/dashboard/` предоставляет полноценную статистику:\n    *   **Ключевые показатели (KPI):** Общее число цитат, источников, лайков и просмотров.\n    *   **Различные топы:** 10 лучших цитат по лайкам, 10 по просмотрам и 5 последних добавленных.\n*   **Интерактивная статистика:** Для каждой цитаты ведется подсчет просмотров, лайков и дизлайков. Голосование реализовано асинхронно (AJAX/Fetch API) без перезагрузки страницы.\n*   **Админ-панель:** Удобное управление цитатами и источниками с реализацией всей бизнес-логики на уровне моделей:\n    *   Нельзя добавить более 3 цитат на один источник. Диапазон \"веса\" ограничен для удобства пользователя.\n    *   В админ-панели отображается количество цитат у каждого источника.\n*   Приложение поставляется с начальным набором цитат, которые автоматически загружаются при первой миграции для удобства проверки.\n*   Проект имеет 100% тестовое покрытие и соответствует стандартам `Ruff`.\n\n## Стек технологий\n\n*   **Backend:** Python 3, Django\n*   **Frontend:** HTML5, CSS3 (Flexbox), JavaScript (Fetch API)\n*   **База данных:** SQLite\n*   **Тестирование:** `unittest`, `coverage`\n*   **Развертывание:** PythonAnywhere\n\n## Локальный запуск\n\n#### 1. Подготовка окружения\nКлонируйте репозиторий и перейдите в его директорию:\n```bash\ngit clone https://github.com/JKL2theBest/quote-service-django\ncd quote-service-django\n```\nСоздайте и активируйте виртуальное окружение:\n\nДля Linux/macOS\n```bash\npython -m venv venv\nsource venv/bin/activate\n```\nДля Windows\n```bash\npython -m venv venv\nvenv\\Scripts\\activate\n```\nУстановите зависимости:\n```bash\npip install -r requirements.txt\n```\n\n#### 2. Конфигурация\nСоздайте файл `.env` в корневой директории проекта. Этот файл используется для хранения секретных настроек и не отслеживается Git.\n```\nSECRET_KEY='your-very-secret-django-key-here'\nDEBUG=True\nALLOWED_HOSTS=127.0.0.1,localhost\n```\n*Генерация ключа:*\n```\npython -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"\n```\n\n#### 3. Запуск приложения\nПримените миграции. На этом шаге база данных будет создана и автоматически наполнена начальным набором цитат.\n```bash\npython manage.py migrate\n```\nСоздайте суперпользователя для доступа к административной панели:\n```bash\npython manage.py createsuperuser\n```\nЗапустите сервер для разработки (по умолчанию на порту 8000):\n```bash\npython manage.py runserver 8080\n```\nПриложение будет доступно по адресу `http://127.0.0.1:8080/`.  \nАдминистративная панель: `http://127.0.0.1:8080/admin/`.\n\n## Тестирование\n\nПроект имеет 100% покрытие кода тестами. Для запуска всех тестов выполните команду:\n```bash\npython manage.py test quotes\n```\nДля генерации отчета о покрытии (требуется `coverage`):\n```bash\ncoverage run manage.py test quotes\ncoverage report\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkl2thebest%2Fquote-service-django","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkl2thebest%2Fquote-service-django","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkl2thebest%2Fquote-service-django/lists"}