|
1 | 1 |  |
2 | | -# Blog App |
3 | 2 |
|
4 | | -Blog App — это веб-приложение на Django для создания, управления и просмотра блог-постов с аутентификацией через JWT-токены. |
| 3 | +# ✨ Blog Web App |
5 | 4 |
|
6 | | -## Основные возможности |
| 5 | +**Blog Web App** — это современное веб-приложение на **Django**, позволяющее создавать 📝, редактировать ✏️ и просматривать 👀 блог-посты с безопасной аутентификацией через **JWT-токены**. |
7 | 6 |
|
8 | | -- **Создание постов**: авторизированные пользователи могут добавлять и редактировать свои посты. |
9 | | -- **Чтение постов**: все пользователи могут просматривать посты. |
10 | | -- **Авторизация через JWT**: безопасная авторизация с использованием Access и Refresh токенов (Algorithm RS256). |
| 7 | +--- |
11 | 8 |
|
12 | | -## Стек технологий |
| 9 | +## 🚀 Основные возможности |
13 | 10 |
|
14 | | -- **Backend**: Django, Django REST Framework |
15 | | -- **Аутентификация**: JWT (с использованием `djangorestframework-simplejwt`) |
16 | | -- **База данных**: PostgreSQL (или SQLite для локальной разработки) |
17 | | -- **Кэширование**: Django Cache (опционально, для оптимизации производительности) |
| 11 | +- 📝 **Создание постов**: авторизированные пользователи могут добавлять и редактировать свои посты. |
| 12 | +- 👥 **Чтение постов**: все пользователи могут просматривать записи. |
| 13 | +- 🔐 **Авторизация через JWT**: безопасная аутентификация с использованием Access и Refresh токенов (Algorithm **RS256**). |
18 | 14 |
|
19 | | -## Установка и запуск |
| 15 | +--- |
20 | 16 |
|
21 | | -### Клонирование репозитория |
| 17 | +## 🛠️ Стек технологий |
22 | 18 |
|
23 | | -```bash |
24 | | -git clone https://github.com/RustamovAkrom/Blog-2.git |
25 | | -cd Blog-2 |
26 | | -``` |
| 19 | +- **Backend**: Django, Django REST Framework |
| 20 | +- **Аутентификация**: JWT (`djangorestframework-simplejwt`) |
| 21 | +- **База данных**: PostgreSQL (или SQLite для локальной разработки) |
| 22 | +- **Кэширование**: Django Cache (опционально 🚀 для ускорения работы) |
| 23 | + |
| 24 | +--- |
27 | 25 |
|
28 | | -### Настройка виртуального окружения |
| 26 | +## ⚡ Быстрый старт |
29 | 27 |
|
30 | | -Создайте и активируйте виртуальное окружение: |
| 28 | +### 📥 Клонирование репозитория |
| 29 | +```bash |
| 30 | +git clone https://github.com/RustamovAkrom/Blog-Web-APP.git |
| 31 | +cd Blog-Web-APP |
| 32 | +``` |
31 | 33 |
|
| 34 | +### 🐍 Настройка виртуального окружения |
32 | 35 | ```bash |
33 | 36 | python -m venv venv |
34 | 37 | source venv/bin/activate # для Linux/macOS |
35 | | -venv\Scripts\activate # для Windows |
| 38 | +venv\Scripts\activate # для Windows |
36 | 39 | ``` |
37 | 40 |
|
38 | | -### Установка зависимостей |
39 | | - |
40 | | -Установите необходимые зависимости: |
41 | | - |
| 41 | +### 📦 Установка зависимостей |
42 | 42 | ```bash |
43 | 43 | pip install -r requirements.txt |
44 | 44 | ``` |
45 | 45 |
|
46 | | -### Настройка переменных окружения |
47 | | - |
48 | | -Создайте файл `.env` в корне проекта и добавьте туда настройки для базы данных и JWT. Пример: |
49 | | - |
50 | | -```sh |
51 | | -#!/bin/bash |
| 46 | +### ⚙️ Настройка переменных окружения |
| 47 | +Создайте файл `.env` в корне проекта и укажите настройки: |
52 | 48 |
|
| 49 | +```bash |
53 | 50 | SECRET_KEY=<your django secret key> |
| 51 | +DEBUG=True |
| 52 | +ALLOWED_HOSTS=localhost,127.0.0.1 |
| 53 | +DJANGO_SETTINGS_MODULE=core.settings.development |
54 | 54 |
|
55 | | -DEBUG=True # default |
56 | | - |
57 | | -ALLOWED_HOSTS=localhost,127.0.0.1 # default |
58 | | - |
59 | | -# `core.settings.development` or `core.setting.production` |
60 | | -DJANGO_SETTINGS_MODULE=core.settings.development # default |
| 55 | +PRIVATE_KEY_PATH=security_settings/private_key.pem |
| 56 | +PUBLIC_KEY_PATH=security_settings/public_key.pem |
61 | 57 |
|
62 | | -PRIVATE_KEY_PATH=security_settings/private_key.pem # default |
63 | | -PUBLIC_KEY_PATH=security_settings/public_key.pem # default |
| 58 | +DATABASE_ENVIRON=sqlite |
64 | 59 |
|
65 | | -DATABASE_ENVIRON=sqlite # sqlite or postgres |
66 | | - |
67 | | -# PostgreSQL configruations |
68 | 60 | DATABASE_NAME=<your database name> |
69 | 61 | DATABASE_USER=<your database user> |
70 | 62 | DATABASE_PASSWORD=<your database password> |
71 | | -DATABASE_HOST=localhost # default |
72 | | -DATABASE_PORT=5432 # default |
| 63 | +DATABASE_HOST=localhost |
| 64 | +DATABASE_PORT=5432 |
73 | 65 |
|
74 | | -ADMIN_USERNAME=admin # default |
75 | | -ADMIN_PASSWORD=password # default |
76 | | -ADMIN_EMAIL=admin@example.com # default |
| 66 | +ADMIN_USERNAME=admin |
| 67 | +ADMIN_PASSWORD=password |
| 68 | +ADMIN_EMAIL=admin@example.com |
77 | 69 | ``` |
78 | 70 |
|
79 | | -### Применение миграций и создание суперпользователя |
| 71 | +--- |
| 72 | + |
| 73 | +## 🔑 Генерация RSA-ключей |
80 | 74 |
|
81 | | -Примените миграции и создайте суперпользователя для доступа к админ-панели: |
| 75 | +JWT с алгоритмом **RS256** требует приватный и публичный ключи. |
| 76 | +👉 Подробная инструкция: [docs/generate-rsa-keys-for-simple-jwt.md](docs/generate-rsa-keys-for-simple-jwt.md) |
82 | 77 |
|
| 78 | +--- |
| 79 | + |
| 80 | +### 📚 Применение миграций и создание суперпользователя |
83 | 81 | ```bash |
84 | 82 | python manage.py migrate |
85 | 83 | python manage.py createadmin |
86 | 84 | ``` |
87 | 85 |
|
88 | | -### Запуск сервера |
89 | | - |
90 | | -Запустите сервер разработки: |
91 | | - |
| 86 | +### ▶️ Запуск сервера |
92 | 87 | ```bash |
93 | 88 | python manage.py runserver |
94 | 89 | ``` |
95 | 90 |
|
96 | | -Теперь ваше приложение доступно по адресу: `http://127.0.0.1:8000` |
| 91 | +Теперь приложение доступно по адресу: |
| 92 | +👉 `http://127.0.0.1:8000` |
97 | 93 |
|
98 | | -## Аутентификация через JWT |
| 94 | +--- |
99 | 95 |
|
100 | | -Blog App использует JWT для аутентификации. При входе в систему клиент получает два токена: |
101 | | -- **Access Token** — для доступа к защищённым маршрутам. |
102 | | -- **Refresh Token** — для обновления Access Token. |
| 96 | +## 🔐 Аутентификация через JWT |
103 | 97 |
|
104 | | -<!-- ### Эндпоинты для аутентификации |
| 98 | +После входа пользователь получает два токена: |
105 | 99 |
|
106 | | -- **`/api/token/`** — получение Access и Refresh токенов (логин). |
107 | | -- **`/api/token/refresh/`** — обновление Access Token с помощью Refresh Token. |
108 | | -- **`/api/token/verify/`** — проверка действительности токена. --> |
| 100 | +- 🔑 **Access Token** — доступ к защищённым маршрутам |
| 101 | +- ♻️ **Refresh Token** — обновление Access Token |
109 | 102 |
|
110 | | -### Пример использования JWT |
| 103 | +Пример использования: |
| 104 | +```http |
| 105 | +Authorization: Bearer <access_token> |
| 106 | +``` |
111 | 107 |
|
112 | | -1. Получите Access и Refresh токены с помощью `/api/token/`. |
113 | | -2. Используйте Access Token для доступа к защищённым эндпоинтам, добавляя его в заголовок запросов: |
| 108 | +--- |
114 | 109 |
|
115 | | - ```http |
116 | | - Authorization: Bearer <access_token> |
117 | | - ``` |
| 110 | +## 📂 Структура проекта |
118 | 111 |
|
119 | | -3. Когда Access Token истекает, обновите его с помощью `/api/token/refresh/`, отправляя Refresh Token в теле запроса. |
| 112 | +- `apps/users` — управление пользователями и аутентификацией |
| 113 | +- `apps/blog` — блог-посты |
| 114 | +- `middleware` — JWT-middleware |
| 115 | +- `settings` — настройки Django, базы данных и кэша |
120 | 116 |
|
121 | | -<!-- ## API эндпоинты |
| 117 | +--- |
122 | 118 |
|
123 | | -- **GET /api/posts/**: Просмотр всех постов |
124 | | -- **POST /api/posts/**: Создание нового поста (только для авторизованных пользователей) |
125 | | -- **GET /api/posts/<id>/**: Просмотр поста по ID |
126 | | -- **PUT /api/posts/<id>/**: Обновление поста (только для автора) |
127 | | -- **DELETE /api/posts/<id>/**: Удаление поста (только для автора) --> |
| 119 | +## ⚡ Кэширование |
128 | 120 |
|
129 | | -## Структура проекта |
| 121 | +Для ускорения работы Blog App можно использовать кэширование JWT-токенов. |
130 | 122 |
|
131 | | -- **apps/users**: Приложение для управления пользователями и аутентификацией. |
132 | | -- **apps/posts**: Приложение для создания, редактирования и удаления блог-постов. |
133 | | -- **middleware**: JWT Middleware для авторизации с использованием токенов. |
134 | | -- **settings**: Файл настроек Django, включая конфигурацию базы данных и кэширования. |
| 123 | +--- |
135 | 124 |
|
136 | | -## Кэширование |
| 125 | +## 📜 Лицензия |
137 | 126 |
|
138 | | -Для ускорения работы Blog App можно использовать кэширование JWT-токенов. Этот механизм позволяет кэшировать данные пользователей для быстрого доступа без необходимости каждый раз проверять токен. |
| 127 | +Проект распространяется по лицензии **MIT License**. |
139 | 128 |
|
140 | | -## Лицензия |
| 129 | +--- |
141 | 130 |
|
142 | | -Этот проект лицензирован на условиях **MIT License**. |
| 131 | +## 📖 Документация |
143 | 132 |
|
144 | | -## Documentations: https://rustamovakrom.github.io/Blog-2/ |
| 133 | +Подробная документация доступна здесь: |
| 134 | +👉 [Documentation](https://rustamovakrom.github.io/blog-web-app/) |
0 commit comments