django-hero-gen 1.1.1 → 1.1.2
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/index.js +2 -0
- package/package.json +1 -1
- package/src/commands.js +4 -0
- package/src/model/order_model.js +38 -0
- package/src/model/user_model.js +42 -0
- package/src/templates/my_course.js +54 -45
package/index.js
CHANGED
|
@@ -15,6 +15,8 @@ const actions = {
|
|
|
15
15
|
auth: cmds.makeAuth, // вьюхи логина/регистрации
|
|
16
16
|
orders: cmds.makeOrders, // Теперь эта команда будет работать
|
|
17
17
|
admin: cmds.makeAdmin,
|
|
18
|
+
modelsOrders: cmds.makeModelOrders,
|
|
19
|
+
modelsUser: cmds.makeModelUser,
|
|
18
20
|
|
|
19
21
|
// Полная сборка
|
|
20
22
|
init: cmds.initFull,
|
package/package.json
CHANGED
package/src/commands.js
CHANGED
|
@@ -7,6 +7,8 @@ const createCourseTpl = require("./templates/create_course");
|
|
|
7
7
|
const myCourseTpl = require("./templates/my_course");
|
|
8
8
|
const authViewsTpl = require("./view/auth_view");
|
|
9
9
|
const orderViewsTpl = require("./view/order_view");
|
|
10
|
+
const modelOrdersTpl = require("./model/orders_model");
|
|
11
|
+
const modelUserTpl = require("./model/user_model");
|
|
10
12
|
|
|
11
13
|
const saveFile = (fileName, content) => {
|
|
12
14
|
const filePath = path.join(process.cwd(), fileName);
|
|
@@ -40,6 +42,8 @@ module.exports = {
|
|
|
40
42
|
makeListPage: () => saveFile("my_course.html", myCourseTpl()),
|
|
41
43
|
makeAuth: () => saveFile("views.py", authViewsTpl()),
|
|
42
44
|
makeOrders: () => saveFile("order_views.py", orderViewsTpl()),
|
|
45
|
+
makeModelOrders: () => saveFile("models.py", modelOrdersTpl()),
|
|
46
|
+
makeModelUser: () => saveFile("models.py", modelUserTpl()),
|
|
43
47
|
makeAdmin: () =>
|
|
44
48
|
saveFile(
|
|
45
49
|
"admin.py",
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module.exports = () => `
|
|
2
|
+
from django.db import models
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
# Create your models here.
|
|
5
|
+
class Orders(models.Model):
|
|
6
|
+
|
|
7
|
+
COURSE = [
|
|
8
|
+
|
|
9
|
+
('algo','АЛгоритмы'),
|
|
10
|
+
('design','Дизайн'),
|
|
11
|
+
('bd','БАЗЫ ДАННЫХ'),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
STATUS = [
|
|
16
|
+
('new','новая'),
|
|
17
|
+
('in_progress','в процессе выполнения'),
|
|
18
|
+
('completed','завершено'),
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
PAYMENT = [
|
|
23
|
+
('cash','наличкой'),
|
|
24
|
+
('on_phone','по номеру телефона'),
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
|
|
29
|
+
|
|
30
|
+
course = models.CharField(max_length=120,choices=COURSE,verbose_name='Выберите курс')
|
|
31
|
+
payment = models.CharField(max_length=120,choices=PAYMENT,verbose_name='Выберите способ оплаты')
|
|
32
|
+
|
|
33
|
+
status = models.CharField(max_length=120,default='new',choices=STATUS)
|
|
34
|
+
|
|
35
|
+
date = models.DateField('дата')
|
|
36
|
+
|
|
37
|
+
review = models.TextField(blank=True)
|
|
38
|
+
`;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module.exports = () => `
|
|
2
|
+
# Модель базы данных авторизации
|
|
3
|
+
from django.db import models
|
|
4
|
+
from django.contrib.auth.models import AbstractUser
|
|
5
|
+
from django_cryptography.fields import encrypt
|
|
6
|
+
from phonenumber_field.modelfields import PhoneNumberField
|
|
7
|
+
from django.core.validators import RegexValidator
|
|
8
|
+
|
|
9
|
+
class CustomUser(AbstractUser):
|
|
10
|
+
|
|
11
|
+
login_validator = RegexValidator(
|
|
12
|
+
regex=r'^[a-zA-Z0-9]{6,}$',
|
|
13
|
+
message='(латиница и цифры, не менее 6 символов)'
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
full_name_validator = RegexValidator(
|
|
17
|
+
regex=r'^[а-яА-ЯёЁ\s]+$',
|
|
18
|
+
message='(символы кириллицы и пробелы)'
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
username = models.CharField(
|
|
22
|
+
unique=True,
|
|
23
|
+
max_length=120,
|
|
24
|
+
verbose_name='Логин',
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
email = models.EmailField(
|
|
29
|
+
unique=True,
|
|
30
|
+
max_length=120,
|
|
31
|
+
verbose_name='Почта'
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
full_name = models.CharField(
|
|
35
|
+
max_length=120,
|
|
36
|
+
verbose_name='ФИО',
|
|
37
|
+
validators=[full_name_validator]
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
phone = PhoneNumberField(region='RU')
|
|
41
|
+
|
|
42
|
+
`;
|
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
module.exports = () => `
|
|
2
|
-
{% extends "base.html" %}
|
|
2
|
+
{% extends "base.html" %}
|
|
3
|
+
{% load bootstrap5 %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
3
6
|
<div class="container my-5">
|
|
4
7
|
<div class="row">
|
|
8
|
+
|
|
5
9
|
{% for order in course %}
|
|
6
10
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
7
|
-
<div class="card h-100">
|
|
11
|
+
<div class="card h-100 shadow-sm">
|
|
12
|
+
|
|
8
13
|
<div class="card-header">
|
|
9
|
-
<h5 class="
|
|
14
|
+
<h5 class="mb-0">{{ order.get_course_display }}</h5>
|
|
10
15
|
</div>
|
|
16
|
+
|
|
11
17
|
<div class="card-body">
|
|
12
|
-
<p class="text-muted"
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
<p class="text-muted">
|
|
19
|
+
<small>Дата начала: {{ order.date }}</small>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
{% if order.review %}
|
|
23
|
+
<p>
|
|
24
|
+
<strong>Ваш отзыв:</strong><br>
|
|
25
|
+
{{ order.review }}
|
|
26
|
+
</p>
|
|
15
27
|
{% endif %}
|
|
16
28
|
</div>
|
|
17
|
-
<div class="card-footer">
|
|
18
|
-
<span class="badge bg-secondary">{{ order.get_status_display }}</span>
|
|
19
29
|
|
|
20
|
-
|
|
30
|
+
<div class="card-footer d-flex justify-content-between align-items-center">
|
|
31
|
+
<span class="badge bg-secondary">
|
|
32
|
+
{{ order.get_status_display }}
|
|
33
|
+
</span>
|
|
34
|
+
|
|
35
|
+
{% if order.status == 'completed' and not order.review %}
|
|
21
36
|
<button
|
|
22
37
|
type="button"
|
|
23
|
-
class="btn btn-sm btn-outline-primary
|
|
38
|
+
class="btn btn-sm btn-outline-primary"
|
|
24
39
|
data-bs-toggle="modal"
|
|
25
40
|
data-bs-target="#reviewModal{{ order.id }}"
|
|
26
41
|
>
|
|
@@ -31,67 +46,61 @@ module.exports = () => `
|
|
|
31
46
|
</div>
|
|
32
47
|
</div>
|
|
33
48
|
|
|
34
|
-
<div
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
>
|
|
49
|
+
<div class="modal fade"
|
|
50
|
+
id="reviewModal{{ order.id }}"
|
|
51
|
+
tabindex="-1"
|
|
52
|
+
aria-hidden="true">
|
|
53
|
+
|
|
40
54
|
<div class="modal-dialog modal-dialog-centered">
|
|
41
55
|
<div class="modal-content">
|
|
56
|
+
|
|
42
57
|
<form method="post" action="{% url 'add_review' order.id %}">
|
|
43
58
|
{% csrf_token %}
|
|
59
|
+
|
|
44
60
|
<div class="modal-header">
|
|
45
|
-
<h5 class="modal-title"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
<h5 class="modal-title">
|
|
62
|
+
Отзыв о курсе «{{ order.get_course_display }}»
|
|
63
|
+
</h5>
|
|
64
|
+
<button type="button"
|
|
65
|
+
class="btn-close"
|
|
66
|
+
data-bs-dismiss="modal"></button>
|
|
51
67
|
</div>
|
|
68
|
+
|
|
52
69
|
<div class="modal-body">
|
|
53
70
|
<textarea
|
|
54
|
-
name="
|
|
71
|
+
name="review"
|
|
55
72
|
class="form-control"
|
|
56
73
|
rows="4"
|
|
57
74
|
placeholder="Напишите ваш отзыв..."
|
|
58
|
-
|
|
59
|
-
if
|
|
60
|
-
order.review_text
|
|
61
|
-
%}readonly{%
|
|
62
|
-
endif
|
|
63
|
-
%}
|
|
64
|
-
>
|
|
65
|
-
{{ order.review_text }}</textarea
|
|
66
|
-
>
|
|
75
|
+
required></textarea>
|
|
67
76
|
</div>
|
|
77
|
+
|
|
68
78
|
<div class="modal-footer">
|
|
69
|
-
<button
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
data-bs-dismiss="modal"
|
|
73
|
-
>
|
|
79
|
+
<button type="button"
|
|
80
|
+
class="btn btn-secondary"
|
|
81
|
+
data-bs-dismiss="modal">
|
|
74
82
|
Закрыть
|
|
75
83
|
</button>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
{% else %}
|
|
80
|
-
<button type="button" class="btn btn-success" disabled>
|
|
81
|
-
Отзыв уже оставлен
|
|
84
|
+
<button type="submit"
|
|
85
|
+
class="btn btn-primary">
|
|
86
|
+
Отправить
|
|
82
87
|
</button>
|
|
83
|
-
{% endif %}
|
|
84
88
|
</div>
|
|
89
|
+
|
|
85
90
|
</form>
|
|
91
|
+
|
|
86
92
|
</div>
|
|
87
93
|
</div>
|
|
88
94
|
</div>
|
|
89
95
|
|
|
90
96
|
{% empty %}
|
|
91
97
|
<div class="col-12">
|
|
92
|
-
<div class="alert alert-info"
|
|
98
|
+
<div class="alert alert-info text-center">
|
|
99
|
+
У вас пока нет заявок
|
|
100
|
+
</div>
|
|
93
101
|
</div>
|
|
94
102
|
{% endfor %}
|
|
103
|
+
|
|
95
104
|
</div>
|
|
96
105
|
</div>
|
|
97
106
|
{% endblock %}
|