Загрузка данных
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).
Если возникнет конкретная ошибка в терминале — скопируйте её текст сюда, и я сразу скажу, что именно нужно исправить!