init commit
This commit is contained in:
3
.history/backend/customization/admin_20250506100403.py
Normal file
3
.history/backend/customization/admin_20250506100403.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
11
.history/backend/customization/admin_20250506103854.py
Normal file
11
.history/backend/customization/admin_20250506103854.py
Normal file
@@ -0,0 +1,11 @@
|
||||
# backend/apps/customization/admin.py
|
||||
|
||||
from django.contrib import admin
|
||||
from .models import DesignSettings
|
||||
|
||||
@admin.register(DesignSettings)
|
||||
class DesignSettingsAdmin(admin.ModelAdmin):
|
||||
list_display = ('user', 'theme_color', 'font_family', 'updated_at')
|
||||
list_filter = ('theme_color',)
|
||||
search_fields = ('user__username',)
|
||||
readonly_fields = ('updated_at',)
|
||||
3
.history/backend/customization/models_20250506100403.py
Normal file
3
.history/backend/customization/models_20250506100403.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
17
.history/backend/customization/models_20250506101457.py
Normal file
17
.history/backend/customization/models_20250506101457.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
|
||||
class DesignSettings(models.Model):
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='design'
|
||||
)
|
||||
theme_color = models.CharField(max_length=7, default='#ffffff')
|
||||
background_image = models.ImageField(upload_to='backgrounds/', null=True, blank=True)
|
||||
font_family = models.CharField(max_length=100, default='sans-serif')
|
||||
custom_css = models.TextField(blank=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"Design for {self.user.username}"
|
||||
156
.history/backend/customization/models_20250506102230.py
Normal file
156
.history/backend/customization/models_20250506102230.py
Normal file
@@ -0,0 +1,156 @@
|
||||
# customization/models.py
|
||||
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
|
||||
class DesignSettings(models.Model):
|
||||
"""
|
||||
Настройки дизайна для публичной страницы пользователя.
|
||||
"""
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='design',
|
||||
help_text='Пользователь, которому принадлежат настройки'
|
||||
)
|
||||
theme_color = models.CharField(
|
||||
max_length=7,
|
||||
default='#ffffff',
|
||||
help_text='Основной цвет темы (hex)'
|
||||
)
|
||||
background_image = models.ImageField(
|
||||
upload_to='backgrounds/',
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text='Фоновое изображение'
|
||||
)
|
||||
font_family = models.CharField(
|
||||
max_length=100,
|
||||
default='sans-serif',
|
||||
help_text='Название шрифта'
|
||||
)
|
||||
custom_css = models.TextField(
|
||||
blank=True,
|
||||
help_text='Дополнительный CSS'
|
||||
)
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
help_text='Дата и время последнего изменения'
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"Design for {self.user.username}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Настройки дизайна'
|
||||
verbose_name_plural = 'Настройки дизайна'
|
||||
ordering = ['user']
|
||||
unique_together = ('user',)
|
||||
def get_background_image_url(self):
|
||||
"""
|
||||
Возвращает URL фонового изображения.
|
||||
"""
|
||||
return self.background_image.url if self.background_image else None
|
||||
def get_custom_css(self):
|
||||
"""
|
||||
Возвращает пользовательский CSS.
|
||||
"""
|
||||
return self.custom_css if self.custom_css else ""
|
||||
def get_design_settings(self):
|
||||
"""
|
||||
Возвращает словарь с настройками дизайна.
|
||||
"""
|
||||
return {
|
||||
'theme_color': self.theme_color,
|
||||
'background_image': self.get_background_image_url(),
|
||||
'font_family': self.font_family,
|
||||
'custom_css': self.get_custom_css()
|
||||
}
|
||||
def save(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод save, чтобы автоматически обновлять дату изменения.
|
||||
"""
|
||||
self.updated_at = timezone.now()
|
||||
super().save(*args, **kwargs)
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод delete, чтобы удалять связанные изображения.
|
||||
"""
|
||||
if self.background_image:
|
||||
self.background_image.delete(save=False)
|
||||
super().delete(*args, **kwargs)
|
||||
def get_user(self):
|
||||
"""
|
||||
Возвращает пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user
|
||||
def get_user_id(self):
|
||||
"""
|
||||
Возвращает ID пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.id
|
||||
def get_user_username(self):
|
||||
"""
|
||||
Возвращает имя пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.username
|
||||
def get_user_email(self):
|
||||
"""
|
||||
Возвращает email пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.email if self.user.email else "Нет email"
|
||||
def get_user_full_name(self):
|
||||
"""
|
||||
Возвращает полное имя пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_full_name() if self.user.get_full_name() else "Нет полного имени"
|
||||
def get_user_bio(self):
|
||||
"""
|
||||
Возвращает биографию пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_bio() if self.user.get_bio() else "Нет биографии"
|
||||
def get_user_avatar(self):
|
||||
"""
|
||||
Возвращает URL аватара пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_avatar() if self.user.get_avatar() else None
|
||||
def get_user_links(self):
|
||||
"""
|
||||
Возвращает список ссылок пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_links() if self.user.get_user_links() else []
|
||||
def get_user_groups(self):
|
||||
"""
|
||||
Возвращает группы пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_groups() if self.user.get_user_groups() else []
|
||||
def get_user_design(self):
|
||||
"""
|
||||
Возвращает настройки дизайна пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_design() if self.user.get_user_design() else None
|
||||
def get_user_info(self):
|
||||
"""
|
||||
Возвращает информацию о пользователе, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_info() if self.user.get_user_info() else {}
|
||||
def get_user_settings(self):
|
||||
"""
|
||||
Возвращает настройки пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_settings() if self.user.get_user_settings() else {}
|
||||
def get_user_preferences(self):
|
||||
"""
|
||||
Возвращает предпочтения пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_preferences() if self.user.get_user_preferences() else {}
|
||||
def get_user_notifications(self):
|
||||
"""
|
||||
Возвращает уведомления пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_notifications() if self.user.get_user_notifications() else []
|
||||
def get_user_friends(self):
|
||||
"""
|
||||
Возвращает друзей пользователя, которому принадлежат настройки дизайна.
|
||||
"""
|
||||
return self.user.get_user_friends() if self.user.get_user_friends() else []
|
||||
110
.history/backend/customization/models_20250506102358.py
Normal file
110
.history/backend/customization/models_20250506102358.py
Normal file
@@ -0,0 +1,110 @@
|
||||
# customization/models.py
|
||||
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
|
||||
class DesignSettings(models.Model):
|
||||
"""
|
||||
Настройки дизайна для публичной страницы пользователя.
|
||||
"""
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='design',
|
||||
help_text='Пользователь, которому принадлежат настройки'
|
||||
)
|
||||
theme_color = models.CharField(
|
||||
max_length=7,
|
||||
default='#ffffff',
|
||||
help_text='Основной цвет темы (hex)'
|
||||
)
|
||||
background_image = models.ImageField(
|
||||
upload_to='backgrounds/',
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text='Фоновое изображение'
|
||||
)
|
||||
font_family = models.CharField(
|
||||
max_length=100,
|
||||
default='sans-serif',
|
||||
help_text='Название шрифта'
|
||||
)
|
||||
custom_css = models.TextField(
|
||||
blank=True,
|
||||
help_text='Дополнительный CSS'
|
||||
)
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
help_text='Дата и время последнего изменения'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Настройки дизайна'
|
||||
verbose_name_plural = 'Настройки дизайна'
|
||||
ordering = ['user']
|
||||
unique_together = ('user',)
|
||||
|
||||
def __str__(self):
|
||||
return f"Design for {self.user.username}"
|
||||
|
||||
def get_background_image_url(self):
|
||||
"""
|
||||
Возвращает URL фонового изображения.
|
||||
"""
|
||||
return self.background_image.url if self.background_image else None
|
||||
|
||||
def get_custom_css(self):
|
||||
"""
|
||||
Возвращает пользовательский CSS.
|
||||
"""
|
||||
return self.custom_css or ""
|
||||
|
||||
def get_design_settings(self):
|
||||
"""
|
||||
Возвращает словарь с настройками дизайна.
|
||||
"""
|
||||
return {
|
||||
'theme_color': self.theme_color,
|
||||
'background_image': self.get_background_image_url(),
|
||||
'font_family': self.font_family,
|
||||
'custom_css': self.get_custom_css()
|
||||
}
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод save, чтобы автоматически обновлять дату изменения.
|
||||
"""
|
||||
self.updated_at = timezone.now()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод delete, чтобы удалять связанные изображения.
|
||||
"""
|
||||
if self.background_image:
|
||||
self.background_image.delete(save=False)
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
# Вспомогательные методы для доступа к данным пользователя
|
||||
|
||||
def get_user(self):
|
||||
return self.user
|
||||
|
||||
def get_user_id(self):
|
||||
return self.user.id
|
||||
|
||||
def get_user_username(self):
|
||||
return self.user.username
|
||||
|
||||
def get_user_email(self):
|
||||
return self.user.email or "Нет email"
|
||||
|
||||
def get_user_full_name(self):
|
||||
return self.user.get_full_name() or "Нет полного имени"
|
||||
|
||||
def get_user_bio(self):
|
||||
return self.user.bio or "Нет биографии"
|
||||
|
||||
def get_user_avatar(self):
|
||||
return self.user.avatar.url if self.user.avatar else None
|
||||
110
.history/backend/customization/models_20250506185325.py
Normal file
110
.history/backend/customization/models_20250506185325.py
Normal file
@@ -0,0 +1,110 @@
|
||||
# customization/models.py
|
||||
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
|
||||
class DesignSettings(models.Model):
|
||||
"""
|
||||
Настройки дизайна для публичной страницы пользователя.
|
||||
"""
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='design',
|
||||
help_text='Пользователь, которому принадлежат настройки'
|
||||
)
|
||||
theme_color = models.CharField(
|
||||
max_length=7,
|
||||
default='#ffffff',
|
||||
help_text='Основной цвет темы (hex)'
|
||||
)
|
||||
background_image = models.ImageField(
|
||||
upload_to='customization/',
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text='Фоновое изображение'
|
||||
)
|
||||
font_family = models.CharField(
|
||||
max_length=100,
|
||||
default='sans-serif',
|
||||
help_text='Название шрифта'
|
||||
)
|
||||
custom_css = models.TextField(
|
||||
blank=True,
|
||||
help_text='Дополнительный CSS'
|
||||
)
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
help_text='Дата и время последнего изменения'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Настройки дизайна'
|
||||
verbose_name_plural = 'Настройки дизайна'
|
||||
ordering = ['user']
|
||||
unique_together = ('user',)
|
||||
|
||||
def __str__(self):
|
||||
return f"Design for {self.user.username}"
|
||||
|
||||
def get_background_image_url(self):
|
||||
"""
|
||||
Возвращает URL фонового изображения.
|
||||
"""
|
||||
return self.background_image.url if self.background_image else None
|
||||
|
||||
def get_custom_css(self):
|
||||
"""
|
||||
Возвращает пользовательский CSS.
|
||||
"""
|
||||
return self.custom_css or ""
|
||||
|
||||
def get_design_settings(self):
|
||||
"""
|
||||
Возвращает словарь с настройками дизайна.
|
||||
"""
|
||||
return {
|
||||
'theme_color': self.theme_color,
|
||||
'background_image': self.get_background_image_url(),
|
||||
'font_family': self.font_family,
|
||||
'custom_css': self.get_custom_css()
|
||||
}
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод save, чтобы автоматически обновлять дату изменения.
|
||||
"""
|
||||
self.updated_at = timezone.now()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Переопределяем метод delete, чтобы удалять связанные изображения.
|
||||
"""
|
||||
if self.background_image:
|
||||
self.background_image.delete(save=False)
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
# Вспомогательные методы для доступа к данным пользователя
|
||||
|
||||
def get_user(self):
|
||||
return self.user
|
||||
|
||||
def get_user_id(self):
|
||||
return self.user.id
|
||||
|
||||
def get_user_username(self):
|
||||
return self.user.username
|
||||
|
||||
def get_user_email(self):
|
||||
return self.user.email or "Нет email"
|
||||
|
||||
def get_user_full_name(self):
|
||||
return self.user.get_full_name() or "Нет полного имени"
|
||||
|
||||
def get_user_bio(self):
|
||||
return self.user.bio or "Нет биографии"
|
||||
|
||||
def get_user_avatar(self):
|
||||
return self.user.avatar.url if self.user.avatar else None
|
||||
5
.history/backend/customization/urls_20250506161339.py
Normal file
5
.history/backend/customization/urls_20250506161339.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.urls import path
|
||||
|
||||
urlpatterns = [
|
||||
# дополнительные эндпоинты по ссылкам
|
||||
]
|
||||
Reference in New Issue
Block a user