django-hero-gen 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -64
- package/package.json +1 -1
- package/src/admin/admin.js +10 -0
- package/src/commands.js +5 -10
- package/src/model/user_model.js +6 -15
- package/src/settings/core_settings.js +15 -11
- package/src/templates/base.js +4 -1
- package/src/templates/create_course.js +2 -2
- package/src/templates/home.js +2 -2
- package/src/templates/login.js +4 -3
- package/src/templates/my_course.js +1 -1
- package/src/templates/registration.js +4 -3
package/README.md
CHANGED
|
@@ -1,125 +1,229 @@
|
|
|
1
|
-
|
|
1
|
+
> **⚠️ ДИСКЛЕЙМЕР:** Данный инструмент и руководство созданы исключительно в образовательных целях. Настоятельно рекомендуется использовать этот CLI-инструмент как средство для **подготовки к экзамену**, автоматизации рутины и изучения структуры Django, а не как способ для списывания. Понимание того, как работает сгенерированный код — залог успешной защиты!
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# 🦸♂️ Django Hero Gen (v1.3.0) — Demo Edition
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Django Hero Gen** — это CLI-инструмент для молниеносного развертывания Django-проектов. Текущая версия полностью адаптирована под **PostgreSQL**, **Crispy Forms** и **локальную работу** (без интернета).
|
|
6
6
|
|
|
7
7
|
## 🚀 Быстрый старт
|
|
8
8
|
|
|
9
9
|
### Установка
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Глобальная установка (рекомендуется):
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
npm install -g django-hero-gen
|
|
15
15
|
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Запуск через `npx`:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx django-hero-gen <команда>
|
|
22
22
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🎓 Гайд: Как написать демо-проект с нуля
|
|
28
|
+
|
|
29
|
+
### Шаг 1: Подготовка папки
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
1. На рабочем столе создай папку с названием `demo`.
|
|
32
|
+
2. Нажми на неё правой кнопкой мыши и выбери **«Открыть с помощью Code»** (VS Code).
|
|
33
|
+
3. В VS Code нажми `Ctrl + ~` (тильда), чтобы открыть терминал.
|
|
34
|
+
|
|
35
|
+
### Шаг 2: Настройка окружения
|
|
36
|
+
|
|
37
|
+
Скопируй и вставь эти команды в терминал по очереди:
|
|
38
|
+
|
|
39
|
+
1. **Создаем виртуальное окружение:**
|
|
28
40
|
|
|
29
41
|
```bash
|
|
30
|
-
|
|
42
|
+
python -m venv venv
|
|
31
43
|
|
|
32
44
|
```
|
|
33
45
|
|
|
34
|
-
|
|
46
|
+
2. **Активируем его:**
|
|
35
47
|
|
|
36
|
-
|
|
48
|
+
```bash
|
|
49
|
+
venv\Scripts\activate
|
|
37
50
|
|
|
38
|
-
|
|
51
|
+
```
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
_(Слева от строки ввода должно появиться `(venv)`. Это значит — всё ок!)_ 3. **Устанавливаем библиотеки:**
|
|
41
54
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| `dj-gen base` | `base.html` | Каркас: Navbar, Footer, блоки контента. |
|
|
45
|
-
| `dj-gen home` | `home.html` | Главная: Слайдер (Carousel) и описание сервиса. |
|
|
46
|
-
| `dj-gen course_page` | `create_course.html` | Страница с формой создания объектов. |
|
|
47
|
-
| `dj-gen my_course` | `my_course.html` | Список карточек с модальными окнами. |
|
|
48
|
-
| `dj-gen login_page` | `login.html` | Готовая страница входа. |
|
|
49
|
-
| `dj-gen registration_page` | `registration.html` | Страница регистрации пользователей. |
|
|
55
|
+
```bash
|
|
56
|
+
pip install django psycopg2 django-crispy-forms crispy-bootstrap5
|
|
50
57
|
|
|
51
|
-
|
|
58
|
+
```
|
|
52
59
|
|
|
53
|
-
|
|
60
|
+
### Шаг 3: Настройка базы данных (Слоник)
|
|
54
61
|
|
|
55
|
-
|
|
62
|
+
1. Запусти **pgAdmin 4** (синий слоник) на рабочем столе.
|
|
63
|
+
2. Нажми правой кнопкой на `Databases` -> `Create` -> `Database...`.
|
|
64
|
+
3. В поле `Database` напиши название: **`db_demo`**.
|
|
65
|
+
4. Нажми `Save`. На этом работа в pgAdmin закончена.
|
|
56
66
|
|
|
57
|
-
|
|
58
|
-
- `dj-gen orders_view` — Создает `order_views.py` (Бизнес-логика заказов/курсов).
|
|
59
|
-
- `dj-gen admin` — Стандартный `admin.py` для регистрации моделей.
|
|
67
|
+
### Шаг 4: Создание структуры проекта
|
|
60
68
|
|
|
61
|
-
|
|
69
|
+
В терминале VS Code:
|
|
70
|
+
|
|
71
|
+
1. **Создаем проект:** `django-admin startproject project .` (точка в конце важна!).
|
|
72
|
+
2. **Создаем приложения:**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python manage.py startapp accounts
|
|
76
|
+
python manage.py startapp orders
|
|
62
77
|
|
|
63
|
-
|
|
64
|
-
- `dj-gen modelsOrders` — `models.py` с моделью заявок/курсов.
|
|
65
|
-
- `dj-gen userForm` — `forms.py` для регистрации и профиля.
|
|
66
|
-
- `dj-gen orderForm` — `forms.py` для создания заявок.
|
|
78
|
+
```
|
|
67
79
|
|
|
68
|
-
|
|
80
|
+
3. **Создаем папки для дизайна:** `mkdir static templates`.
|
|
69
81
|
|
|
70
|
-
- `
|
|
71
|
-
- `dj-gen authUrls` — `urls.py` для логики аккаунтов.
|
|
72
|
-
- `dj-gen ordersUrls` — `urls.py` для логики заказов.
|
|
82
|
+
- _Важно:_ скопируй файлы `bootstrap.min.css` и `bootstrap.bundle.min.js` из папки Bootstrap на рабочем столе в свою новую папку `static`.
|
|
73
83
|
|
|
74
84
|
---
|
|
75
85
|
|
|
76
|
-
##
|
|
86
|
+
## ⚡ Наполнение кодом (Используем CLI)
|
|
87
|
+
|
|
88
|
+
1. **В корневой папке (`demo/`):**
|
|
89
|
+
|
|
90
|
+
- `dj-gen settings` — скопируй вывод в `project/settings.py`. Укажи свой пароль от Postgres.
|
|
91
|
+
|
|
92
|
+
2. **В папке `accounts/`:**
|
|
93
|
+
|
|
94
|
+
- `dj-gen modelUser`, `dj-gen auth_view`, `dj-gen userForm`, `dj-gen authUrls`
|
|
95
|
+
|
|
96
|
+
3. **В папке `orders/`:**
|
|
97
|
+
|
|
98
|
+
- `dj-gen modelOrders`, `dj-gen orders_view`, `dj-gen orderForm`, `dj-gen ordersUrls`
|
|
99
|
+
|
|
100
|
+
4. **В папке `templates/`:**
|
|
101
|
+
|
|
102
|
+
- `dj-gen base`, `dj-gen home`
|
|
103
|
+
|
|
104
|
+
5. **В папке `templates/auth/` (создай её):**
|
|
105
|
+
|
|
106
|
+
- `dj-gen login_page`, `dj-gen registration_page`
|
|
107
|
+
|
|
108
|
+
6. **В папке `templates/orders/` (создай её):**
|
|
109
|
+
|
|
110
|
+
- `dj-gen course_page` (создаст `create_course.html`)
|
|
111
|
+
- `dj-gen my_course` (создаст `my_course.html`)
|
|
112
|
+
|
|
113
|
+
**Финальный штрих (Миграции):**
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
python manage.py makemigrations
|
|
117
|
+
python manage.py migrate
|
|
118
|
+
python manage.py runserver
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
77
123
|
|
|
78
|
-
|
|
124
|
+
## 📁 Примерная структура проекта может отличаться
|
|
79
125
|
|
|
80
126
|
```text
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
│
|
|
85
|
-
│
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
├─ models.py # Модели
|
|
92
|
-
├─ forms.py # Формы
|
|
93
|
-
├─ urls.py # Маршруты
|
|
94
|
-
└─ admin.py # Админка
|
|
127
|
+
demo/
|
|
128
|
+
├── venv/ # Окружение
|
|
129
|
+
├── static/ # Сюда положи Bootstrap!
|
|
130
|
+
│ ├── css/bootstrap.min.css
|
|
131
|
+
│ └── js/bootstrap.bundle.min.js
|
|
132
|
+
├── templates/ # HTML шаблоны
|
|
133
|
+
├── accounts/ # Логика пользователей
|
|
134
|
+
├── orders/ # Логика заданий
|
|
135
|
+
├── project/ # Настройки
|
|
136
|
+
└── manage.py
|
|
95
137
|
|
|
96
138
|
```
|
|
97
139
|
|
|
98
140
|
---
|
|
99
141
|
|
|
100
|
-
##
|
|
142
|
+
## 🐘 Лайфхак для схем
|
|
101
143
|
|
|
102
|
-
|
|
144
|
+
Если на экзамене нужна **ER-диаграмма**:
|
|
103
145
|
|
|
104
|
-
1. **
|
|
146
|
+
1. В **pgAdmin** нажми правой кнопкой на базу `db_demo`.
|
|
147
|
+
2. Выбери **ERD Tool**.
|
|
148
|
+
3. Программа сама нарисует связи. Сделай скриншот для отчета!
|
|
105
149
|
|
|
106
|
-
|
|
107
|
-
pip install django-bootstrap5 django-phonenumber-field
|
|
150
|
+
---
|
|
108
151
|
|
|
109
|
-
|
|
152
|
+
## 🛠 Все доступные команды
|
|
153
|
+
|
|
154
|
+
### 1. HTML-шаблоны (Bootstrap 5)
|
|
155
|
+
|
|
156
|
+
> Запускать **в папке `templates/`**
|
|
157
|
+
|
|
158
|
+
| Команда | Файл | Описание |
|
|
159
|
+
| -------------------------- | -------------------- | --------------------------------------------- |
|
|
160
|
+
| `dj-gen base` | `base.html` | Базовый шаблон: Navbar, Footer, `{% block %}` |
|
|
161
|
+
| `dj-gen home` | `home.html` | Главная страница с Carousel и описанием |
|
|
162
|
+
| `dj-gen course_page` | `create_course.html` | Страница создания курса / заявки |
|
|
163
|
+
| `dj-gen my_course` | `my_course.html` | Список курсов / заявок с модальными окнами |
|
|
164
|
+
| `dj-gen login_page` | `login.html` | Страница входа |
|
|
165
|
+
| `dj-gen registration_page` | `registration.html` | Страница регистрации |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### 2. Django-логика (Python)
|
|
170
|
+
|
|
171
|
+
> Запускать **в папке приложения**
|
|
110
172
|
|
|
111
|
-
|
|
173
|
+
#### 📌 Views и Admin
|
|
112
174
|
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
|
|
175
|
+
- `dj-gen auth_view`
|
|
176
|
+
➜ `views.py`
|
|
177
|
+
Авторизация, регистрация, cookies, login / logout
|
|
178
|
+
|
|
179
|
+
- `dj-gen orders_view`
|
|
180
|
+
➜ `order_views.py`
|
|
181
|
+
CRUD-логика курсов / заявок
|
|
182
|
+
|
|
183
|
+
- `dj-gen admin`
|
|
184
|
+
➜ `admin.py`
|
|
185
|
+
Регистрация моделей в админке
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
#### 📌 Модели
|
|
190
|
+
|
|
191
|
+
- `dj-gen modelUser`
|
|
192
|
+
➜ `models.py`
|
|
193
|
+
Кастомный пользователь (`AbstractUser`)
|
|
194
|
+
|
|
195
|
+
- `dj-gen modelOrders`
|
|
196
|
+
➜ `models.py`
|
|
197
|
+
Модель курсов / заявок
|
|
116
198
|
|
|
117
199
|
---
|
|
118
200
|
|
|
119
|
-
|
|
201
|
+
#### 📌 Формы
|
|
120
202
|
|
|
121
|
-
|
|
203
|
+
- `dj-gen userForm`
|
|
204
|
+
➜ `forms.py`
|
|
205
|
+
Форма регистрации и профиля пользователя
|
|
122
206
|
|
|
123
|
-
|
|
207
|
+
- `dj-gen orderForm`
|
|
208
|
+
➜ `forms.py`
|
|
209
|
+
Форма создания заявки / курса
|
|
124
210
|
|
|
125
211
|
---
|
|
212
|
+
|
|
213
|
+
#### 📌 URLs
|
|
214
|
+
|
|
215
|
+
- `dj-gen authUrls`
|
|
216
|
+
➜ `urls.py`
|
|
217
|
+
Маршруты аутентификации
|
|
218
|
+
|
|
219
|
+
- `dj-gen ordersUrls`
|
|
220
|
+
➜ `urls.py`
|
|
221
|
+
Маршруты курсов / заявок
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 📜 Лицензия и Автор
|
|
226
|
+
|
|
227
|
+
**MIT License** | Автор: **[https://t.me/asapaholik](https://t.me/asapaholik)**
|
|
228
|
+
|
|
229
|
+
🔥 **Удачи! Ты справишься!**
|
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports = () => `
|
|
2
|
+
from django.contrib import admin
|
|
3
|
+
from .models import Orders
|
|
4
|
+
|
|
5
|
+
@admin.register(Orders)
|
|
6
|
+
class OrdersAdmin(admin.ModelAdmin):
|
|
7
|
+
list_display = ('user', 'course', 'date', 'payment', 'status')
|
|
8
|
+
list_filter = ('status', 'payment', 'course')
|
|
9
|
+
|
|
10
|
+
`;
|
package/src/commands.js
CHANGED
|
@@ -16,6 +16,7 @@ const userFormTpl = require("./forms/user_form");
|
|
|
16
16
|
const orderFormTpl = require("./forms/order_form");
|
|
17
17
|
const loginPageTpl = require("./templates/login");
|
|
18
18
|
const registrationPageTpl = require("./templates/registration");
|
|
19
|
+
const adminTpl = require("./admin/admin");
|
|
19
20
|
|
|
20
21
|
const saveFile = (fileName, content) => {
|
|
21
22
|
const filePath = path.join(process.cwd(), fileName);
|
|
@@ -35,10 +36,7 @@ const makeAll = () => {
|
|
|
35
36
|
saveFile("my_course.html", myCourseTpl());
|
|
36
37
|
saveFile("views.py", authViewsTpl());
|
|
37
38
|
saveFile("order_views.py", orderViewsTpl());
|
|
38
|
-
saveFile(
|
|
39
|
-
"admin.py",
|
|
40
|
-
`from django.contrib import admin\n\n# Register your models here.`,
|
|
41
|
-
);
|
|
39
|
+
saveFile("admin.py", adminTpl());
|
|
42
40
|
console.log("✨ Готово! Не забудь настроить urls.py.");
|
|
43
41
|
};
|
|
44
42
|
|
|
@@ -48,7 +46,7 @@ module.exports = {
|
|
|
48
46
|
makeCreatePage: () => saveFile("create_course.html", createCourseTpl()),
|
|
49
47
|
makeListPage: () => saveFile("my_course.html", myCourseTpl()),
|
|
50
48
|
makeAuth: () => saveFile("views.py", authViewsTpl()),
|
|
51
|
-
makeOrders: () => saveFile("
|
|
49
|
+
makeOrders: () => saveFile("views.py", orderViewsTpl()),
|
|
52
50
|
makeModelOrders: () => saveFile("models.py", modelOrdersTpl()),
|
|
53
51
|
makeModelUser: () => saveFile("models.py", modelUserTpl()),
|
|
54
52
|
makeSettings: () => saveFile("settings.py", coreSettingsTpl()),
|
|
@@ -57,12 +55,9 @@ module.exports = {
|
|
|
57
55
|
makeUserForm: () => saveFile("forms.py", userFormTpl()),
|
|
58
56
|
makeOrderForm: () => saveFile("forms.py", orderFormTpl()),
|
|
59
57
|
makeLoginPage: () => saveFile("login.html", loginPageTpl()),
|
|
58
|
+
makeAdmin: () => saveFile("admin.py", adminTpl()),
|
|
60
59
|
makeRegistrationPage: () =>
|
|
61
60
|
saveFile("registration.html", registrationPageTpl()),
|
|
62
|
-
|
|
63
|
-
saveFile(
|
|
64
|
-
"admin.py",
|
|
65
|
-
`from django.contrib import admin\n\n# Register your models here.`,
|
|
66
|
-
),
|
|
61
|
+
|
|
67
62
|
initFull: makeAll,
|
|
68
63
|
};
|
package/src/model/user_model.js
CHANGED
|
@@ -2,26 +2,15 @@ module.exports = () => `
|
|
|
2
2
|
# Модель базы данных авторизации
|
|
3
3
|
from django.db import models
|
|
4
4
|
from django.contrib.auth.models import AbstractUser
|
|
5
|
-
|
|
6
|
-
from django.core.validators import RegexValidator
|
|
5
|
+
|
|
7
6
|
|
|
8
7
|
class CustomUser(AbstractUser):
|
|
9
8
|
|
|
10
|
-
login_validator = RegexValidator(
|
|
11
|
-
regex=r'^[a-zA-Z0-9]{6,}$',
|
|
12
|
-
message='(латиница и цифры, не менее 6 символов)'
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
full_name_validator = RegexValidator(
|
|
16
|
-
regex=r'^[а-яА-ЯёЁ\s]+$',
|
|
17
|
-
message='(символы кириллицы и пробелы)'
|
|
18
|
-
)
|
|
19
|
-
|
|
20
9
|
username = models.CharField(
|
|
21
10
|
unique=True,
|
|
22
11
|
max_length=120,
|
|
23
12
|
verbose_name='Логин',
|
|
24
|
-
|
|
13
|
+
|
|
25
14
|
)
|
|
26
15
|
|
|
27
16
|
|
|
@@ -34,9 +23,11 @@ class CustomUser(AbstractUser):
|
|
|
34
23
|
full_name = models.CharField(
|
|
35
24
|
max_length=120,
|
|
36
25
|
verbose_name='ФИО',
|
|
37
|
-
validators=[full_name_validator]
|
|
38
26
|
)
|
|
39
27
|
|
|
40
|
-
phone =
|
|
28
|
+
phone = models.CharField(
|
|
29
|
+
max_length=20,
|
|
30
|
+
verbose_name='Номер телефона'
|
|
31
|
+
)
|
|
41
32
|
|
|
42
33
|
`;
|
|
@@ -2,7 +2,7 @@ module.exports = () => `
|
|
|
2
2
|
"""
|
|
3
3
|
Django settings for project project.
|
|
4
4
|
|
|
5
|
-
Generated by 'django-admin startproject' using Django 4.2.
|
|
5
|
+
Generated by 'django-admin startproject' using Django 4.2.27.
|
|
6
6
|
|
|
7
7
|
For more information on this file, see
|
|
8
8
|
https://docs.djangoproject.com/en/4.2/topics/settings/
|
|
@@ -21,7 +21,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
|
|
21
21
|
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
|
22
22
|
|
|
23
23
|
# SECURITY WARNING: keep the secret key used in production secret!
|
|
24
|
-
SECRET_KEY = 'django-insecure
|
|
24
|
+
SECRET_KEY = 'django-insecure-=n27(^4l^ake6@5y2*s9*j%tw&!o9vi%z7e4_2w6bmm737k!87'
|
|
25
25
|
|
|
26
26
|
# SECURITY WARNING: don't run with debug turned on in production!
|
|
27
27
|
DEBUG = True
|
|
@@ -40,9 +40,8 @@ INSTALLED_APPS = [
|
|
|
40
40
|
'django.contrib.staticfiles',
|
|
41
41
|
'accounts',
|
|
42
42
|
'orders',
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
|
|
43
|
+
'crispy_forms',
|
|
44
|
+
'crispy_bootstrap5',
|
|
46
45
|
]
|
|
47
46
|
|
|
48
47
|
MIDDLEWARE = [
|
|
@@ -81,8 +80,13 @@ WSGI_APPLICATION = 'project.wsgi.application'
|
|
|
81
80
|
|
|
82
81
|
DATABASES = {
|
|
83
82
|
'default': {
|
|
84
|
-
|
|
85
|
-
'NAME':
|
|
83
|
+
'ENGINE': 'django.db.backends.postgresql',
|
|
84
|
+
'NAME':'demo2',
|
|
85
|
+
'USER':'postgres',
|
|
86
|
+
'PASSWORD':'0405',
|
|
87
|
+
'HOST':'localhost',
|
|
88
|
+
'PORT':'5432',
|
|
89
|
+
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
|
|
@@ -122,15 +126,15 @@ USE_TZ = True
|
|
|
122
126
|
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
|
123
127
|
|
|
124
128
|
STATIC_URL = 'static/'
|
|
125
|
-
|
|
126
129
|
STATICFILES_DIRS = [
|
|
127
|
-
BASE_DIR /
|
|
130
|
+
BASE_DIR / 'static',
|
|
128
131
|
]
|
|
129
|
-
|
|
130
132
|
# Default primary key field type
|
|
131
133
|
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
|
132
134
|
|
|
133
135
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
134
|
-
|
|
135
136
|
AUTH_USER_MODEL = 'accounts.CustomUser'
|
|
137
|
+
|
|
138
|
+
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
|
139
|
+
CRISPY_TEMPLATE_PACK = "bootstrap5"
|
|
136
140
|
`;
|
package/src/templates/base.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module.exports = () => `
|
|
2
2
|
{% extends "base.html" %}
|
|
3
|
-
{% load
|
|
3
|
+
{% load crispy_forms_tags %}
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
{% block content %}
|
|
@@ -11,7 +11,7 @@ module.exports = () => `
|
|
|
11
11
|
|
|
12
12
|
<form method="post">
|
|
13
13
|
{% csrf_token %}
|
|
14
|
-
{%
|
|
14
|
+
{% crispy form %}
|
|
15
15
|
<button type="submit" class="btn btn-primary">Отправить заявку</button>
|
|
16
16
|
</form>
|
|
17
17
|
|
package/src/templates/home.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module.exports = () => `{% extends "base.html" %}
|
|
2
|
-
{% load
|
|
2
|
+
{% load crispy_forms_tags %}
|
|
3
|
+
{% load static %}
|
|
3
4
|
{% block content %}
|
|
4
5
|
<style>
|
|
5
6
|
.carousel-control-prev-icon,
|
|
@@ -19,7 +20,6 @@ module.exports = () => `{% extends "base.html" %}
|
|
|
19
20
|
height: 250px;
|
|
20
21
|
}
|
|
21
22
|
</style>
|
|
22
|
-
{% bootstrap_css %} {% bootstrap_javascript %}
|
|
23
23
|
|
|
24
24
|
<div id="carouselExampleAutoplaying" class="carousel slide py-5 mb-5" data-bs-ride="carousel" data-bs-interval="400">
|
|
25
25
|
<div class="carousel-inner">
|
package/src/templates/login.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
module.exports =
|
|
1
|
+
module.exports =
|
|
2
|
+
() => ` {% extends 'base.html' %} {% load crispy_forms_tags %} {%
|
|
2
3
|
block content %}
|
|
3
4
|
|
|
4
5
|
<div class="container">
|
|
5
6
|
<form method="post">
|
|
6
|
-
{% csrf_token %} {%
|
|
7
|
-
<button class="btn-primary">Войти</button>
|
|
7
|
+
{% csrf_token %} {% crispy form %}
|
|
8
|
+
<button class="btn btn-primary">Войти</button>
|
|
8
9
|
</form>
|
|
9
10
|
<div><a href="{% url 'registration' %}"></a></div>
|
|
10
11
|
</div>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
module.exports =
|
|
1
|
+
module.exports =
|
|
2
|
+
() => ` {% extends 'base.html' %} {% load crispy_forms_tags %} {%
|
|
2
3
|
block content %}
|
|
3
4
|
|
|
4
5
|
<div class="container">
|
|
5
6
|
<form method="post">
|
|
6
|
-
{% csrf_token %} {%
|
|
7
|
-
<button class="btn-primary">Зарегистрироваться</button>
|
|
7
|
+
{% csrf_token %} {% crispy form %}
|
|
8
|
+
<button class="btn btn-primary">Зарегистрироваться</button>
|
|
8
9
|
</form>
|
|
9
10
|
<div><a href="{% url 'login' %}"></a></div>
|
|
10
11
|
</div>
|