{"id":19831307,"url":"https://github.com/rustamovakrom/blog-2","last_synced_at":"2025-06-23T17:38:29.874Z","repository":{"id":261931667,"uuid":"756869384","full_name":"RustamovAkrom/Blog-2","owner":"RustamovAkrom","description":"✅Django Blog app ","archived":false,"fork":false,"pushed_at":"2024-11-21T14:48:09.000Z","size":7932,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-11T10:16:25.635Z","etag":null,"topics":["css","django","html","htmx-django","javascript","jwt-authentication","python","restframework","restframework-simple-jwt","rs256","rs256-jwt-deno","security","seo-optimization","session-athentication"],"latest_commit_sha":null,"homepage":"https://akromjonblog.pythonanywhere.com/","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/RustamovAkrom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"AkromRustamov","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"akromjonru1","thanks_dev":"rustamovakrom","custom":null}},"created_at":"2024-02-13T13:22:32.000Z","updated_at":"2024-11-21T14:48:13.000Z","dependencies_parsed_at":"2024-11-16T11:22:14.809Z","dependency_job_id":null,"html_url":"https://github.com/RustamovAkrom/Blog-2","commit_stats":null,"previous_names":["rustamovakrom/blog-2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RustamovAkrom%2FBlog-2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RustamovAkrom%2FBlog-2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RustamovAkrom%2FBlog-2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RustamovAkrom%2FBlog-2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RustamovAkrom","download_url":"https://codeload.github.com/RustamovAkrom/Blog-2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241191457,"owners_count":19925260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["css","django","html","htmx-django","javascript","jwt-authentication","python","restframework","restframework-simple-jwt","rs256","rs256-jwt-deno","security","seo-optimization","session-athentication"],"created_at":"2024-11-12T11:29:54.804Z","updated_at":"2025-02-28T17:42:43.786Z","avatar_url":"https://github.com/RustamovAkrom.png","language":"Python","funding_links":["https://patreon.com/AkromRustamov","https://buymeacoffee.com/akromjonru1","https://thanks.dev/rustamovakrom"],"categories":[],"sub_categories":[],"readme":"![logo](logo.png)\r\n# Blog App\r\n\r\nBlog App — это веб-приложение на Django для создания, управления и просмотра блог-постов с аутентификацией через JWT-токены.\r\n\r\n## Основные возможности\r\n\r\n- **Создание постов**: авторизированные пользователи могут добавлять и редактировать свои посты.\r\n- **Чтение постов**: все пользователи могут просматривать посты.\r\n- **Авторизация через JWT**: безопасная авторизация с использованием Access и Refresh токенов (Algorithm RS256).\r\n\r\n## Стек технологий\r\n\r\n- **Backend**: Django, Django REST Framework\r\n- **Аутентификация**: JWT (с использованием `djangorestframework-simplejwt`)\r\n- **База данных**: PostgreSQL (или SQLite для локальной разработки)\r\n- **Кэширование**: Django Cache (опционально, для оптимизации производительности)\r\n\r\n## Установка и запуск\r\n\r\n### Клонирование репозитория\r\n\r\n```bash\r\ngit clone https://github.com/RustamovAkrom/Blog-2.git\r\ncd Blog-2\r\n```\r\n\r\n### Настройка виртуального окружения\r\n\r\nСоздайте и активируйте виртуальное окружение:\r\n\r\n```bash\r\npython -m venv venv\r\nsource venv/bin/activate  # для Linux/macOS\r\nvenv\\Scripts\\activate  # для Windows\r\n```\r\n\r\n### Установка зависимостей\r\n\r\nУстановите необходимые зависимости:\r\n\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n\r\n### Настройка переменных окружения\r\n\r\nСоздайте файл `.env` в корне проекта и добавьте туда настройки для базы данных и JWT. Пример:\r\n\r\n```sh\r\n#!/bin/bash\r\n\r\nSECRET_KEY=\u003cyour django secret key\u003e\r\n\r\nDEBUG=True # default\r\n\r\nALLOWED_HOSTS=localhost,127.0.0.1 # default\r\n\r\n# `core.settings.development` or `core.setting.production`\r\nDJANGO_SETTINGS_MODULE=core.settings.development # default\r\n\r\nPRIVATE_KEY_PATH=security_settings/private_key.pem # default\r\nPUBLIC_KEY_PATH=security_settings/public_key.pem # default\r\n\r\nDATABASE_ENVIRON=sqlite # sqlite or postgres\r\n\r\n# PostgreSQL configruations\r\nDATABASE_NAME=\u003cyour database name\u003e\r\nDATABASE_USER=\u003cyour database user\u003e\r\nDATABASE_PASSWORD=\u003cyour database password\u003e\r\nDATABASE_HOST=localhost # default\r\nDATABASE_PORT=5432 # default\r\n\r\nADMIN_USERNAME=admin # default\r\nADMIN_PASSWORD=password # default\r\nADMIN_EMAIL=admin@example.com # default\r\n```\r\n\r\n### Применение миграций и создание суперпользователя\r\n\r\nПримените миграции и создайте суперпользователя для доступа к админ-панели:\r\n\r\n```bash\r\npython manage.py migrate\r\npython manage.py createadmin\r\n```\r\n\r\n### Запуск сервера\r\n\r\nЗапустите сервер разработки:\r\n\r\n```bash\r\npython manage.py runserver\r\n```\r\n\r\nТеперь ваше приложение доступно по адресу: `http://127.0.0.1:8000`\r\n\r\n## Аутентификация через JWT\r\n\r\nBlog App использует JWT для аутентификации. При входе в систему клиент получает два токена:\r\n- **Access Token** — для доступа к защищённым маршрутам.\r\n- **Refresh Token** — для обновления Access Token.\r\n\r\n\u003c!-- ### Эндпоинты для аутентификации\r\n\r\n- **`/api/token/`** — получение Access и Refresh токенов (логин).\r\n- **`/api/token/refresh/`** — обновление Access Token с помощью Refresh Token.\r\n- **`/api/token/verify/`** — проверка действительности токена. --\u003e\r\n\r\n### Пример использования JWT\r\n\r\n1. Получите Access и Refresh токены с помощью `/api/token/`.\r\n2. Используйте Access Token для доступа к защищённым эндпоинтам, добавляя его в заголовок запросов:\r\n\r\n   ```http\r\n   Authorization: Bearer \u003caccess_token\u003e\r\n   ```\r\n\r\n3. Когда Access Token истекает, обновите его с помощью `/api/token/refresh/`, отправляя Refresh Token в теле запроса.\r\n\r\n\u003c!-- ## API эндпоинты\r\n\r\n- **GET /api/posts/**: Просмотр всех постов\r\n- **POST /api/posts/**: Создание нового поста (только для авторизованных пользователей)\r\n- **GET /api/posts/\u003cid\u003e/**: Просмотр поста по ID\r\n- **PUT /api/posts/\u003cid\u003e/**: Обновление поста (только для автора)\r\n- **DELETE /api/posts/\u003cid\u003e/**: Удаление поста (только для автора) --\u003e\r\n\r\n## Структура проекта\r\n\r\n- **apps/users**: Приложение для управления пользователями и аутентификацией.\r\n- **apps/posts**: Приложение для создания, редактирования и удаления блог-постов.\r\n- **middleware**: JWT Middleware для авторизации с использованием токенов.\r\n- **settings**: Файл настроек Django, включая конфигурацию базы данных и кэширования.\r\n\r\n## Кэширование\r\n\r\nДля ускорения работы Blog App можно использовать кэширование JWT-токенов. Этот механизм позволяет кэшировать данные пользователей для быстрого доступа без необходимости каждый раз проверять токен.\r\n\r\n## Лицензия\r\n\r\nЭтот проект лицензирован на условиях **MIT License**.\r\n\r\n## Documentations: https://rustamovakrom.github.io/Blog-2/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustamovakrom%2Fblog-2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frustamovakrom%2Fblog-2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustamovakrom%2Fblog-2/lists"}