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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "django-hero-gen",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Генератор шаблонов для Django",
5
5
  "main": "index.js",
6
6
  "bin": {
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" %} {% load bootstrap5 %} {% block content %}
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="card-title mb-0">{{ order.get_course_display }}</h5>
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"><small>Дата: {{ order.date }}</small></p>
13
- {% if order.review_text %}
14
- <p><strong>Ваш отзыв:</strong> {{ order.review_text }}</p>
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
- {% if order.status == 'completed' %}
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 float-end"
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
- class="modal fade"
36
- id="reviewModal{{ order.id }}"
37
- tabindex="-1"
38
- aria-hidden="true"
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">Оставить отзыв о курсе</h5>
46
- <button
47
- type="button"
48
- class="btn-close"
49
- data-bs-dismiss="modal"
50
- ></button>
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="review_text"
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
- type="button"
71
- class="btn btn-secondary"
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
- {% if not order.review_text %}
78
- <button type="submit" class="btn btn-primary">Отправить</button>
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">У вас пока нет заявок</div>
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 %}