Добавил куки и политику конфиденциальности

This commit is contained in:
NikDizell 2026-03-03 22:15:29 +03:00
parent 61c7af35c1
commit fdacffdf58
11 changed files with 179 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -15,14 +15,14 @@
<meta property="og:description" content="{% block og_description %}{{ meta_description|default:'Профессиональный программист 1С с более чем 10-летним опытом' }}{% endblock %}"> <meta property="og:description" content="{% block og_description %}{{ meta_description|default:'Профессиональный программист 1С с более чем 10-летним опытом' }}{% endblock %}">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="{{ request.build_absolute_uri }}"> <meta property="og:url" content="{{ request.build_absolute_uri }}">
<meta property="og:image" content="{% static 'programmer/images/og-image.jpg' %}"> <!-- <meta property="og:image" content="{% static 'programmer/images/og-image.jpg' %}">-->
<meta property="og:site_name" content="Программист 1С - Николай Сердюк"> <meta property="og:site_name" content="Программист 1С - Николай Сердюк">
<!-- Twitter Card --> <!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{title}}"> <meta name="twitter:title" content="{{title}}">
<meta name="twitter:description" content="{% block twitter_description %}{{ meta_description|default:'Профессиональный программист 1С с более чем 10-летним опытом' }}{% endblock %}"> <meta name="twitter:description" content="{% block twitter_description %}{{ meta_description|default:'Профессиональный программист 1С с более чем 10-летним опытом' }}{% endblock %}">
<meta name="twitter:image" content="{% static 'programmer/images/og-image.jpg' %}"> <!-- <meta name="twitter:image" content="{% static 'programmer/images/og-image.jpg' %}">-->
<!-- Дополнительные SEO-теги --> <!-- Дополнительные SEO-теги -->
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"> <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
@ -365,6 +365,65 @@
max-width: 100%; max-width: 100%;
} }
} }
/* Cookie consent bottom */
.cookie-bottom {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 9999;
width: auto;
max-width: 450px;
min-width: 300px;
background-color: var(--bg-card, #ffffff);
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
border: 1px solid var(--border-light, #e0e0e0);
animation: slideUpFade 0.3s ease;
}
@keyframes slideUpFade {
from { opacity: 0; transform: translate(-50%, 20px); }
to { opacity: 1; transform: translate(-50%, 0); }
}
.cookie-bottom-content {
padding: 1.5rem;
text-align: center;
}
.cookie-bottom-content h3 {
margin: 0 0 0.75rem 0;
font-size: 1.25rem;
color: var(--text-primary, #333);
}
.cookie-bottom-content p {
margin: 0 0 1.5rem 0;
font-size: 0.95rem;
line-height: 1.5;
color: var(--text-secondary, #666);
}
.cookie-bottom-content a {
color: var(--primary, #007bff);
text-decoration: underline;
}
.cookie-bottom-content .btn {
width: 100%;
padding: 0.75rem;
font-size: 1rem;
border-radius: 8px;
}
@media (max-width: 480px) {
.cookie-bottom {
max-width: 90%;
bottom: 10px;
}
}
</style> </style>
{% block extra_css %} {% block extra_css %}
@ -430,8 +489,8 @@
<div class="container"> <div class="container">
<nav class="nav"> <nav class="nav">
<a href="{% url 'home' %}" class="logo"> <a href="{% url 'home' %}" class="logo">
<img src="{% static 'programmer/images/main.ico' %}" alt="Logo" class="logo-img"> <img src="{% static 'programmer/images/black_logo.ico' %}" alt="Logo" class="logo-img">
<span class="logo-text">SNA</span> <span class="logo-text">СНА Технологии</span>
</a> </a>
<!-- Десктопное меню --> <!-- Десктопное меню -->
@ -650,5 +709,27 @@
"description": "Выражаю благодарность программисту 1С Николаю Сердюк за профессиональную работу и качественное решение поставленных задач..." "description": "Выражаю благодарность программисту 1С Николаю Сердюк за профессиональную работу и качественное решение поставленных задач..."
} }
</script> </script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const bottomConsent = document.getElementById('cookie-consent-bottom');
const acceptBtn = document.getElementById('cookie-accept-bottom');
if (!localStorage.getItem('cookieConsent')) {
bottomConsent.style.display = 'block';
}
if (acceptBtn) {
acceptBtn.addEventListener('click', function() {
localStorage.setItem('cookieConsent', 'true');
bottomConsent.style.display = 'none';
});
}
// Можно добавить закрытие по клику вне (но для плашки обычно не нужно)
// Если хотите, можно сделать крестик в углу
});
</script>
{% include 'programmer/includes/cookie_consent.html' %}
</body> </body>
</html> </html>

View File

@ -0,0 +1,12 @@
{% load static %}
<div id="cookie-consent-bottom" class="cookie-bottom" style="display: none;">
<div class="cookie-bottom-content">
<h3>Использование cookies</h3>
<p>
Этот сайт использует cookies. Продолжая, вы соглашаетесь с
<a href="{% url 'privacy' %}" target="_blank">политикой конфиденциальности</a>
и политикой обработки cookies. Вы можете запретить сохранение cookies в настройках своего браузера.
</p>
<button id="cookie-accept-bottom" class="btn btn-primary">Принять и продолжить</button>
</div>
</div>

View File

@ -0,0 +1,77 @@
{% extends 'programmer/base.html' %}
{% load django_bootstrap5 %}
{% block content %}
<h1>Политика в отношении обработки персональных данных</h1>
<h2>1. Общие положения</h2>
<p>
Настоящая политика определяет порядок обработки персональных данных и меры по обеспечению их безопасности, предпринимаемые ИП Сердюк Николай Александрович (далее — Оператор).
</p>
<ul>
<li>Оператор: Сердюк Николай Александрович.</li>
<li>ИНН: 613404767427.</li>
<li>Сайт: <a href="https://nikdizell.ru">nikdizell.ru</a>.</li>
<li>Адрес: 346755, Ростовская область, р-н Азовский, с. Новониколаевка, ул. Ленина, д. 16.</li>
<li>Телефон: +7 (960) 469-40-88.</li>
</ul>
<h2>2. Цели обработки персональных данных</h2>
<p>
Обработка персональных данных осуществляется в следующих целях:
</p>
<ul>
<li>предоставление услуг;</li>
<li>заключение договоров;</li>
<li>информационная рассылка.</li>
</ul>
<h2>3. Виды обрабатываемых персональных данных</h2>
<p>
Оператор может обрабатывать следующие персональные данные:
</p>
<ul>
<li>фамилия, имя, отчество;</li>
<li>номер телефона;</li>
<li>адрес электронной почты.</li>
</ul>
<h2>4. Способы обработки персональных данных</h2>
<p>
Обработка персональных данных осуществляется автоматизированным способом.
</p>
<h2>5. Права субъектов персональных данных</h2>
<p>
Субъекты персональных данных имеют право:
</p>
<ul>
<li>на получение информации, касающейся обработки их персональных данных;</li>
<li>на уточнение, блокирование или уничтожение своих персональных данных в случае, если они являются неполными, устаревшими, неточными, незаконно полученными или не являются необходимыми для заявленной цели обработки;</li>
<li>на отзыв согласия на обработку персональных данных;</li>
<li>на защиту своих прав и законных интересов, в том числе на возмещение убытков и компенсацию морального вреда в судебном порядке;</li>
<li>на обжалование действий или бездействия Оператора в уполномоченный орган по защите прав субъектов персональных данных или в судебном порядке.</li>
</ul>
<h2>6. Меры по обеспечению безопасности персональных данных</h2>
<p>
Оператор принимает необходимые правовые, организационные и технические меры для защиты персональных данных от неправомерного или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий.
</p>
<h2>7. Срок обработки персональных данных</h2>
<p>
Срок обработки персональных данных определяется достижением целей, для которых были собраны персональные данные, если иной срок не предусмотрен договором или действующим законодательством.
</p>
<h2>8. Порядок отзыва согласия на обработку персональных данных</h2>
<p>
Субъект персональных данных может отозвать своё согласие на обработку данных, направив Оператору соответствующее уведомление.
</p>
<h2>9. Заключительные положения</h2>
<p>
Политика действует бессрочно до замены её новой версией. Актуальная версия Политики размещена на сайте <a href="https://nikdizell.ru">nikdizell.ru</a>.
</p>
{% endblock %}

View File

@ -29,6 +29,7 @@ urlpatterns = [
path('register/', views.RegisterView.as_view(), name='register'), path('register/', views.RegisterView.as_view(), name='register'),
path('profile/', views.ProfileView.as_view(), name='profile'), path('profile/', views.ProfileView.as_view(), name='profile'),
path('profile/edit/', views.ProfileEditView.as_view(), name='profile_edit'), path('profile/edit/', views.ProfileEditView.as_view(), name='profile_edit'),
path('privacy/', PrivacyPolicyView.as_view(), name='privacy'),
] ]

View File

@ -264,6 +264,10 @@ class ProfileEditView(LoginRequiredMixin, PageViewTrackingMixin, MenuContextMixi
return self.render_to_response(context) return self.render_to_response(context)
class PrivacyPolicyView(TemplateView):
template_name = 'programmer/privacy.html'
@require_POST @require_POST
def callback_request(request: HttpRequest) -> HttpResponse: def callback_request(request: HttpRequest) -> HttpResponse:
""" """

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB