unknown 1 mese fa
parent
commit
ee381a61f4
4 ha cambiato i file con 112 aggiunte e 4 eliminazioni
  1. 22 2
      app/forms.py
  2. 37 1
      app/models.py
  3. 52 0
      users/forms.py
  4. 1 1
      users/models.py

+ 22 - 2
app/forms.py

@@ -1,4 +1,24 @@
+from django import forms
+from models import Application, Review
 
+COURSE_CHOICES =[
+    ("курс 1", "Курс 1"),
+    ("курс 2", "Курс 2"),
+    ("курс 3", "Курс 3")
+]
 
-class RegisterForm(CreationForms):
-    
+class ApplicationForm(forms.ModelForm):
+    course_name = forms.CharField(label="Название курса", choices=COURSE_CHOICES, widget=forms.Select(attrs={"class": "form-control"}))
+    payment_method = forms.CharField(label="Способ оплаты", choices=Application.PAYMENT_CHOICES, widget=forms.Select(attrs={"class": "form-control"}))
+    date_start = forms.DateField(label="Дата старта обучения", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "ДД.ММ.ГГГГ"}))
+
+    class Meta:
+        model = Application
+        fields = ["course_name", "pyment_method", "date_start", ]
+
+    class ReviewForm(forms.ModelForm):
+        text = forms.CharField(label="Отзыв", widget=forms.Textarea(attrs={"class": "form-control", "rows": 5, "placeholder": "Введите текст отзыва"}))
+
+        class Meta:
+            model = Review
+            fields = ["text", ]

+ 37 - 1
app/models.py

@@ -1,4 +1,40 @@
 from django.db import models
+from korochki import settings
 
 # Create your models here.
-class 
+class Application(models.Model):
+    PAYMENT_CHOICES = [
+        ("наличные", "Наличные"),
+        ("перевод", "Перевод")
+    ]
+
+    STATUS_CHOICES = [
+        ("новая", "Новая"),
+        ("в процессе обучения", "В процессе обучения"),
+        ("обучение завершено", "Обучение завершено") 
+    ]
+    user = models.ForeignKey(
+        settings.AUTH_MODEL_USER,
+        on_delete=models.CASCADE,
+        ordering = ["-created_at"]
+    )
+    course_name = models.CharField("Название курса", max_length=255)
+    status = models.CharField("Статус", max_length=20, choices=STATUS_CHOICES)
+    payment_method = models.CharField("Способ оплаты", max_length=20, choices=PAYMENT_CHOICES)
+    date_start = models.DateField("Желаемая дата старта обучения", max_length=20)
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return r"{self.course_name} - {self.user.username}"
+    
+class Review(models.Model):
+    user = models.ForeignKey(
+        settings.AUTH_MODEL_USER,
+        on_delete=models.CASCADE,
+        ordering = ["-created_at"]
+    )
+    text = models.TextField("Текст отзыва", max_length=255)
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+            return r"Отзыв {self.user.username}"

+ 52 - 0
users/forms.py

@@ -0,0 +1,52 @@
+from django import forms
+from django.contrib.auth.forms import AuthentificationForm, UserCreationForm
+from users.models import User
+import re
+
+class RegisterForm(UserCreationForm):
+    username = forms.CharField(label="Логин", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
+    full_name = forms.CharField(label="ФИО", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите ФИО"}))
+    phone = forms.CharField(label="Номер телефона", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "8(900)000-00-00"}))
+    email = forms.CharField(label="Электронная почта", widget=forms.EmailInput(attrs={"class": "form-control", "placeholder": "Введите email"}))
+    password1 = forms.CharField(label="Пароль", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))
+    password2 = forms.CharField(label="Подтверждение пароля", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Подтвердите пароль"}))
+
+    class Meta:
+        model = User
+        fields = ["username", "full_name", "phone", "email", "password1", "password2", "role", "is_staff"]
+
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        for field in self.fields.values():
+            field.help_text = ""
+    
+    def clean_username(self):
+        username = self.cleaned_data["username"]
+        if not re.fullmatch(r"[A-Za-z0-9]{6, }"):
+            raise forms.ValidationError("Логин должен содержать минимум 6 символов, латинские буквы и цифры")
+        if User.objects.filter(username=username).exists():
+            raise forms.ValidationError("Такой логин уже существует")
+        return username
+    
+    def clean_full_name(self):
+        full_name = self.cleaned_data["full_name"]
+        if not re.fullmatch(r"[А-Яа-яЁё\s]+", full_name):
+            raise forms.ValidationError("ФИО должно содержать кириллицу и пробелы")
+        return full_name
+    
+    def clean_phone(self):
+        phone = self.cleaned_data["phone"]
+        if not re.fullmatch(r"8\d{3}-\d{2}-\d{2}"):
+            raise forms.ValidationError("Телефон должен иметь формат 8(000)-00-00")
+        return phone
+
+    def clean_email(self):
+        email = self.cleaned_data["email"]
+        if User.objects.filter(email=email).exists():
+            raise forms.ValidationError("Такой email уже существует")
+        return email
+    
+class LoginForm(AuthentificationForm):
+    username = forms.CharField(label="", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
+    password = forms.CharField(label="", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))

+ 1 - 1
users/models.py

@@ -1,5 +1,5 @@
 from django.db import models
-from django.contrib 
+from django.contrib.auth.models import AbstractUser
 
 # Create your models here.
 class User(AbstractUser):