Загрузка данных


settings

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'main', # Наше приложение
]

# Добавьте в самый низ файла:
AUTH_USER_MODEL = 'main.CustomUser'
LOGIN_REDIRECT_URL = '/dash/'
LOGOUT_REDIRECT_URL = '/'








models
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    fio = models.CharField('ФИО', max_length=200)
    phone = models.CharField('Телефон', max_length=20)

class Application(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    address = models.CharField('Адрес', max_length=250)
    contacts = models.CharField('Контактные данные', max_length=250)
    date = models.DateField('Дата')
    time = models.TimeField('Время')
    
    service = models.CharField('Услуга', max_length=50, choices=[
        ('Общий', 'Общий клининг'), ('Генеральная', 'Генеральная уборка'), 
        ('Послестроительная', 'Послестроительная уборка'), ('Химчистка', 'Химчистка ковров')
    ])
    payment = models.CharField('Оплата', max_length=20, choices=[
        ('Наличные', 'Наличные'), ('Карта', 'Банковская карта')
    ])
    status = models.CharField('Статус', max_length=20, default='Новая', choices=[
        ('Новая', 'Новая'), ('В работе', 'В работе'), 
        ('Выполнено', 'Выполнено'), ('Отменена', 'Отменена')
    ])
    reason = models.TextField('Причина отмены', blank=True)







admin
from django.contrib import admin
from .models import CustomUser, Application

admin.site.register(CustomUser)

@admin.register(Application)
class ApplicationAdmin(admin.ModelAdmin):
    list_display = ('user', 'service', 'status', 'date')
    list_editable = ('status',) # Позволяет менять статус прямо в списке



views

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.decorators import login_required
from django import forms
from .models import CustomUser, Application

class RegForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ('username', 'fio', 'phone', 'email')

class AppForm(forms.ModelForm):
    class Meta:
        model = Application
        fields = ['address', 'contacts', 'date', 'time', 'service', 'payment']
        widgets = {'date': forms.DateInput(attrs={'type': 'date'}), 'time': forms.TimeInput(attrs={'type': 'time'})}

def register(request):
    form = RegForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        login(request, form.save())
        return redirect('dash')
    return render(request, 'form.html', {'form': form, 'title': 'Регистрация'})

@login_required
def dash(request):
    form = AppForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        app = form.save(commit=False)
        app.user = request.user
        app.save()
        return redirect('dash')
    
    apps = Application.objects.filter(user=request.user).order_by('-id')
    return render(request, 'dash.html', {'form': form, 'apps': apps})






main urls 

from django.urls import path
from django.contrib.auth.views import LoginView, LogoutView
from . import views

urlpatterns = [
    path('', LoginView.as_view(template_name='form.html'), name='login'),
    path('reg/', views.register, name='register'),
    path('logout/', LogoutView.as_view(), name='logout'),
    path('dash/', views.dash, name='dash'),
]







config urls

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
]









хз



Ничего страшного! Давайте начнем с самого начала, «с чистого листа». Сейчас мы создадим всё по порядку.
Выполняйте команды по одной в терминале вашего VS Code.
### Шаг 1: Создание папки и переход в нее
Сначала создадим папку для проекта (назовем ее cleaning_project), чтобы всё было в одном месте:
```bash
mkdir cleaning_project
cd cleaning_project

```
### Шаг 2: Создание виртуального окружения (рекомендуется)
Чтобы в системе не было «мусора», создадим виртуальное окружение:
```bash
python -m venv venv

```
*На Windows активируйте его так:*
```bash
venv\Scripts\activate

```
*(После этой команды в начале строки терминала должна появиться надпись (venv)).*
### Шаг 3: Установка Django
Теперь установим сам Django:
```bash
pip install django

```
### Шаг 4: Создание проекта
Создаем проект (точка в конце важна — она говорит Django, что нужно создать проект в **текущей** папке, а не создавать лишнюю вложенную папку):
```bash
django-admin startproject config .

```
### Шаг 5: Создание приложения
Теперь создаем само приложение main:
```bash
python manage.py startapp main

```
**Теперь проверьте структуру:**
В левой панели VS Code у вас должны появиться папки config и main, а также файл manage.py.
Если вы это видите — поздравляю, фундамент готов! Теперь вы можете вернуться к моему **первому ответу** (где я расписал код для settings.py, models.py и т.д.) и по очереди вставлять его в соответствующие файлы.
**На каком этапе возникнет вопрос или ошибка — пишите, я помогу!**


запуск

Все отлично, мы создали основу. Теперь, чтобы проект заработал и у вас была панель управления, выполните следующие шаги в терминале (убедитесь, что вы находитесь в папке, где лежит файл manage.py и виртуальное окружение venv активировано).
### 1. Подготовка базы данных
Django должен создать таблицы в базе данных для вашего приложения. Выполните эти две команды по очереди:
```bash
python manage.py makemigrations main
python manage.py migrate

```
 * makemigrations main — создает инструкции для создания таблиц на основе вашего кода в models.py.
 * migrate — применяет эти инструкции и физически создает таблицы в базе данных (по умолчанию это файл db.sqlite3).
### 2. Создание администратора
Теперь создадим суперпользователя, чтобы вы могли зайти в админку. Введите команду:
```bash
python manage.py createsuperuser

```
Далее система попросит вас ввести данные. Введите их (обратите внимание: при вводе пароля символы в терминале **не отображаются** — это нормально, просто пишите и жмите Enter):
 1. **Username**: введите adminka (как в вашем задании).
 2. **Email address**: можно оставить пустым, просто нажмите Enter.
 3. **Password**: введите password.
 4. **Password (again)**: снова введите password.
 5. **Bypass password validation**: Если появится предупреждение, что пароль слишком простой (т.к. он короткий), система может спросить подтверждение. Нажмите y и затем Enter.
### 3. Запуск сервера
Теперь все готово к запуску:
```bash
python manage.py runserver

```
После этого в терминале появится ссылка (обычно http://127.0.0.1:8000/).
### Как проверить работу:
 1. **Личный кабинет клиента**: Откройте браузер и перейдите по ссылке http://127.0.0.1:8000/. Там будет форма входа/регистрации, которую мы описали ранее.
 2. **Панель администратора**: Перейдите по ссылке http://127.0.0.1:8000/admin/.
   * Введите логин: adminka
   * Введите пароль: password
В админке вы увидите раздел **Applications**, где сможете просматривать все заявки, которые оставили пользователи, и менять их статус.
### Что делать, если сервер не запускается или выдает ошибки?
 * **Ошибка No module named 'main'**: Убедитесь, что вы добавили 'main' в список INSTALLED_APPS в файле config/settings.py.
 * **Ошибка в коде**: Внимательно проверьте models.py и views.py. Если вы ошиблись хотя бы в одной запятой или отступе, Django выдаст ошибку в терминале (обычно там написано, в какой строке проблема).
 * **Забыли активировать окружение**: Если терминал пишет, что нет модуля django, значит, вы не выполнили venv\Scripts\activate (или source venv/bin/activate на Linux/Mac).
Если возникнет конкретная ошибка в терминале — скопируйте её текст сюда, и я сразу скажу, что именно нужно исправить!