mod: обновить error pages и тестовые комментарии

This commit is contained in:
2026-04-12 20:36:42 +03:00
parent c39838b2f0
commit 8d6e2217c5
16 changed files with 348 additions and 19 deletions

View File

@@ -57,6 +57,8 @@ urlpatterns = [
] ]
handler404 = 'web.views.handler404' handler404 = 'web.views.handler404'
handler400 = 'web.views.handler400'
handler403 = 'web.views.handler403'
handler500 = 'web.views.handler500' handler500 = 'web.views.handler500'
if settings.DEBUG: if settings.DEBUG:

View File

@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — запрос получился некорректным, проверьте адрес, параметры или форму" />
<meta name="keywords" content="cadpoint.ru — плохой запрос" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 400 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 400 error" style="width: 80vw;" />
<pre>запрос получился некорректным.
Проверьте адрес, параметры или форму и&nbsp;попробуйте ещё раз.
<a href="/">Вернуться на&nbsp;главную</a></pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — чтобы открыть эту страницу, нужно войти в систему" />
<meta name="keywords" content="cadpoint.ru — вход в систему" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 401 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 401 error" style="width: 80vw;" />
<pre>для&nbsp;этой страницы нужен вход в&nbsp;систему.
Если у&nbsp;вас есть доступ (и&nbsp;вы&nbsp;знаете где он&nbsp;находится) — войдите и&nbsp;попробуйте ещё раз.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — доступ к этой странице запрещён, проверьте права доступа" />
<meta name="keywords" content="cadpoint.ru — доступ запрещён" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 403 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 403 error" style="width: 80vw;" />
<pre>доступ к&nbsp;этой странице ограничен.
Проверьте права доступа или обратитесь к&nbsp;админис&shy;тратору, если считаете, что это ошибка.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -6,25 +6,26 @@
<meta http-equiv="content-language" content="ru" /> <meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" /> <meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" /> <meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru - http 404 error" /> <meta name="description" content="cadpoint.ru — страница не найдена… возможно, адрес устарел или введён с ошибкой" />
<meta name="keywords" content="cadpoint.ru - http 404 error" /> <meta name="keywords" content="cadpoint.ru — страница не найдена" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" /> <meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" /> <meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" /> <meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 404 error</title> <title>CADpoint.ru - http 404 error</title>
<meta name="theme-color" content="#F5F5F5" /> <meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/static/svgs/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/static/img/favicon.png" /> <link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/static/img/favicon.ico" /> <link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head> </head>
<body> <body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;"> <div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;"> <div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;"> <div style="display:inline-block;">
<img src="/static/svgs/404-error.svg" <img src="/media/_error/svgs/404-error.svg"
width="80%" alt="cadpoint.ru - http 404 error" /> width="80%" alt="cadpoint.ru - http 404 error" />
<pre>попробуйте начать просмотр сайта <a href="/">с главной страницы...</a></pre> <pre>похоже, такой страницы или картинки больше нет.
Если ссылка старая или адрес был введён вручную, вернитесь на&nbsp;главную и&nbsp;попробуйте ещё раз…</pre>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — слишком большой запрос или файл, попробуйте уменьшить объём данных" />
<meta name="keywords" content="cadpoint.ru — слишком большой запрос" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 413 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 413 error" style="width: 80vw;" />
<pre>запрос оказался слишком большим.
Попробуйте уменьшить объём данных или загрузить файл поменьше.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — слишком много запросов, подождите немного и попробуйте снова" />
<meta name="keywords" content="cadpoint.ru — слишком много запросов" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 429 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 429 error" style="width: 80vw;" />
<pre>слишком много запросов за&nbsp;короткое время.
Подождите немного и&nbsp;попробуйте снова.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -6,24 +6,25 @@
<meta http-equiv="content-language" content="ru" /> <meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" /> <meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" /> <meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru - http 500 error" /> <meta name="description" content="cadpoint.ru — внутренняя ошибка сервера, попробуйте открыть страницу чуть позже" />
<meta name="keywords" content="cadpoint.ru - http 500 error" /> <meta name="keywords" content="cadpoint.ru — внутренняя ошибка сервера" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" /> <meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" /> <meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" /> <meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 500 error</title> <title>CADpoint.ru - http 500 error</title>
<meta name="theme-color" content="#F5F5F5" /> <meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/static/svgs/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/static/img/favicon.png" /> <link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/static/img/favicon.ico" /> <link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head> </head>
<body> <body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;"> <div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;"> <div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;"> <div style="display:inline-block;">
<img src="/static/svgs/500-error.svg" alt="cadpoint.ru - http 500 error" style="width: 80vw;" /> <img src="/media/_error/svgs/500-error.svg" alt="cadpoint.ru - http 500 error" style="width: 80vw;" />
<pre>подождите, скоро все починят...</pre> <pre>подождите, скоро всё починят
Если ошибка повторяется, серверу нужен небольшой ремонт.</pre>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — сервис временно недоступен, попробуйте снова чуть позже" />
<meta name="keywords" content="cadpoint.ru — сервис временно недоступен" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 502 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 502 error" style="width: 80vw;" />
<pre>сервис временно недоступен.
Попробуйте открыть страницу чуть позже.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — сервис временно недоступен, идёт обслуживание или высокая нагрузка" />
<meta name="keywords" content="cadpoint.ru — сервис временно недоступен" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 503 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 503 error" style="width: 80vw;" />
<pre>сервис временно недоступен.
Скоро всё должно заработать снова&nbsp;— просто подождите немного.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="ru" />
<meta name="generator" content="Microsoft FrontPage 1.0" />
<meta name="viewport" content="width=device-width, initial-scale=0.4" />
<meta name="description" content="cadpoint.ru — сервер отвечает слишком долго, попробуйте снова чуть позже" />
<meta name="keywords" content="cadpoint.ru — сервер отвечает слишком долго" />
<meta name="copyright" lang="ru" content="Sergei Erjemin" />
<meta name="robots" content="noindex,nofollow" />
<meta name="document-state" content="Static" />
<meta name="generator" content="handcraft" />
<title>CADpoint.ru - http 504 error</title>
<meta name="theme-color" content="#F5F5F5" />
<link rel="icon" type="image/svg+xml" href="/media/_error/svgs/favicon.svg" />
<link rel="icon" type="image/png" href="/media/_error/img/favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="/media/_error/img/favicon.ico" />
</head>
<body>
<div style="width:100%;height:80%;display:table;position:absolute;top:0;left:0;">
<div style="display:table-cell;text-align:center;vertical-align:middle;">
<div style="display:inline-block;">
<img src="/media/_error/svgs/xxx-error.svg" alt="cadpoint.ru - http 504 error" style="width: 80vw;" />
<pre>сервер отвечает слишком долго.
Подождите немного и&nbsp;попробуйте снова.</pre>
</div>
</div>
</div>
</body>
</html>

View File

@@ -5,7 +5,7 @@
<meta name="description" content="{% block Description %}CADpoint — новости о 3D-печати и САПР{% endblock %}" /> <meta name="description" content="{% block Description %}CADpoint — новости о 3D-печати и САПР{% endblock %}" />
<meta name="keywords" content="{% block Keywords %}cadpoint, 3D-печать, САПР, новости{% endblock %}" /> <meta name="keywords" content="{% block Keywords %}cadpoint, 3D-печать, САПР, новости{% endblock %}" />
<meta name="copyright" lang="ru" content="Sergei Erjemin{% block CopyrightAuthor4Meta %}{% endblock %}." /> <meta name="copyright" lang="ru" content="Sergei Erjemin{% block CopyrightAuthor4Meta %}{% endblock %}." />
<meta name="robots" content="index,follow" /> <meta name="robots" content="{% block robots %}index,follow{% endblock %}" />
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<title>{% block page_title %}CADPOINT.RU{% endblock %}</title> <title>{% block page_title %}CADPOINT.RU{% endblock %}</title>
<meta name="meta-title" content="{% block meta_title %}CADPOINT.RU{% endblock %}" /> <meta name="meta-title" content="{% block meta_title %}CADPOINT.RU{% endblock %}" />

View File

@@ -13,7 +13,12 @@ from web.legacy_links import build_canonical_url, replace_legacy_links
from web.models import TbContent from web.models import TbContent
# Этот файл смешивает два типа проверок:
# - простые тесты чистой логики без базы данных (`SimpleTestCase`),
# - интеграционные Django-тесты с базой и HTTP-клиентом (`TestCase`).
class LegacyLinksTests(SimpleTestCase): class LegacyLinksTests(SimpleTestCase):
# `SimpleTestCase` подходит для функций, которые не ходят в базу и не
# требуют полноценного HTTP-запроса: здесь мы просто проверяем строки.
def test_build_canonical_url_without_slug(self): def test_build_canonical_url_without_slug(self):
self.assertEqual(build_canonical_url(123, ''), '/item/123-') self.assertEqual(build_canonical_url(123, ''), '/item/123-')
@@ -42,6 +47,7 @@ class LegacyLinksTests(SimpleTestCase):
self.assertEqual(len(matches), 1) self.assertEqual(len(matches), 1)
# Эти тесты тоже без базы: проверяем очистку HTML и подготовку slug'ов.
class SafeHtmlSpecialSymbolsTests(SimpleTestCase): class SafeHtmlSpecialSymbolsTests(SimpleTestCase):
def test_strips_html_tags_and_decodes_entities(self): def test_strips_html_tags_and_decodes_entities(self):
text = '<p>&laquo;Привет&nbsp;<b>мир</b>&raquo; &shy;<script>alert(1)</script><style>p{}</style></p>' text = '<p>&laquo;Привет&nbsp;<b>мир</b>&raquo; &shy;<script>alert(1)</script><style>p{}</style></p>'
@@ -54,6 +60,7 @@ class SafeHtmlSpecialSymbolsTests(SimpleTestCase):
self.assertEqual(clean_text_to_slug('₽ € $ ₴ ₿'), 'content') self.assertEqual(clean_text_to_slug('₽ € $ ₴ ₿'), 'content')
# Здесь проверяем форму админки: её поля, виджеты и виртуальные настройки.
class AdminTypographFormTests(SimpleTestCase): class AdminTypographFormTests(SimpleTestCase):
def test_admin_form_exposes_virtual_typograph_fields(self): def test_admin_form_exposes_virtual_typograph_fields(self):
form = AdminContentForm() form = AdminContentForm()
@@ -100,7 +107,11 @@ class AdminTypographFormTests(SimpleTestCase):
self.assertEqual(str(item), '007: «Привет мир»') self.assertEqual(str(item), '007: «Привет мир»')
# В этих тестах уже нужна база и `client`, потому что мы проверяем Django-views
# и JSON-ответы как реальные запросы из браузера.
class TagAutocompleteTests(TestCase): class TagAutocompleteTests(TestCase):
# `TestCase` поднимает тестовую БД, а `client` умеет делать полноценные запросы
# к Django, как будто их отправил браузер.
def setUp(self): def setUp(self):
user_model = get_user_model() user_model = get_user_model()
self.user = user_model.objects.create_superuser( self.user = user_model.objects.create_superuser(
@@ -150,6 +161,7 @@ class TagAutocompleteTests(TestCase):
self.assertEqual(payload['pagination']['more'], False) self.assertEqual(payload['pagination']['more'], False)
# Страница со всеми тегами — тоже обычный Django-response, поэтому тут `TestCase`.
class AllTagsPageTests(TestCase): class AllTagsPageTests(TestCase):
def setUp(self): def setUp(self):
user_model = get_user_model() user_model = get_user_model()
@@ -207,6 +219,7 @@ class AllTagsPageTests(TestCase):
self.assertNotContains(response, 'onclick="CookieAcceptDate') self.assertNotContains(response, 'onclick="CookieAcceptDate')
# Здесь проверяем поведение страницы тега, включая пустое состояние.
class TagEmptyStateTests(TestCase): class TagEmptyStateTests(TestCase):
def setUp(self): def setUp(self):
self.item = TbContent.objects.create( self.item = TbContent.objects.create(
@@ -242,6 +255,7 @@ class TagEmptyStateTests(TestCase):
self.assertContains(response, 'не найден или был переименован') self.assertContains(response, 'не найден или был переименован')
# Тут мы проверяем модель и `save()`: slug, типограф, счётчик просмотров и SEO-поля.
class TypographTests(TestCase): class TypographTests(TestCase):
def test_save_generates_slug_from_clean_text(self): def test_save_generates_slug_from_clean_text(self):
item = TbContent(szContentHead='<b>Привет&nbsp;мир</b>') item = TbContent(szContentHead='<b>Привет&nbsp;мир</b>')
@@ -410,6 +424,7 @@ class TypographTests(TestCase):
self.assertNotContains(response, 'None') self.assertNotContains(response, 'None')
# Это тесты карты сайта: проверяем, что в XML попадают только публичные страницы.
class SitemapTests(TestCase): class SitemapTests(TestCase):
def setUp(self): def setUp(self):
self.published = TbContent.objects.create( self.published = TbContent.objects.create(
@@ -444,6 +459,8 @@ class SitemapTests(TestCase):
self.assertNotContains(response, 'skrytaya-statya') self.assertNotContains(response, 'skrytaya-statya')
# Для error-handlers удобно использовать `RequestFactory`: мы сами создаём
# request и вызываем функцию-обработчик напрямую, без прохода через URL-роутинг.
class ErrorHandlersTests(SimpleTestCase): class ErrorHandlersTests(SimpleTestCase):
def setUp(self): def setUp(self):
self.factory = RequestFactory() self.factory = RequestFactory()
@@ -469,7 +486,7 @@ class ErrorHandlersTests(SimpleTestCase):
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
self.assertContains(response, 'CADpoint.ru - http 403 error', status_code=403) self.assertContains(response, 'CADpoint.ru - http 403 error', status_code=403)
self.assertContains(response, '<meta name="robots" content="noindex,nofollow" />', status_code=403) self.assertContains(response, '<meta name="robots" content="noindex,nofollow" />', status_code=403)
self.assertContains(response, 'доступ к этой странице ограничен.', status_code=403) self.assertContains(response, 'доступ к&nbsp;этой странице ограничен.', status_code=403)
def test_handler404_renders_modern_template(self): def test_handler404_renders_modern_template(self):
response = self.client.get('/no-such-page/') response = self.client.get('/no-such-page/')
@@ -477,7 +494,7 @@ class ErrorHandlersTests(SimpleTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
self.assertContains(response, 'CADpoint.ru - http 404 error', status_code=404) self.assertContains(response, 'CADpoint.ru - http 404 error', status_code=404)
self.assertContains(response, '<meta name="robots" content="noindex,nofollow" />', status_code=404) self.assertContains(response, '<meta name="robots" content="noindex,nofollow" />', status_code=404)
self.assertContains(response, 'похоже, такой страницы больше нет.', status_code=404) self.assertContains(response, 'похоже, такой страницы или картинки больше нет.', status_code=404)
def test_handler500_renders_modern_template(self): def test_handler500_renders_modern_template(self):
from web.views import handler500 from web.views import handler500

View File

@@ -26,6 +26,30 @@ def handler404(request, exception: str):
return response return response
def handler400(request, exception: Exception):
""" Обработчик ошибки 400
:param request:
:param exception:
:return: response:
"""
response = render(request, "400.html", {"MSG": exception})
response.status_code = 400
return response
def handler403(request, exception: Exception):
""" Обработчик ошибки 403
:param request:
:param exception:
:return: response:
"""
response = render(request, "403.html", {"MSG": exception})
response.status_code = 403
return response
def handler500(request): def handler500(request):
""" Обработчик ошибки 500 """ Обработчик ошибки 500

18
public/static/README.md Normal file
View File

@@ -0,0 +1,18 @@
# СТАТИКА
Эта папка предназначена для хранения статических файлов, таких как изображения, стили CSS и JavaScript файлы.
Папка будет внутри контейнера, а файлы внутри папки будут доступны с помощью gunicorn и whitenoise на хосте.
Но в случае сбоя контейнера, ошибок Djанго и ошибок 404 при доступе в media (которые будут в папке `media` на
внешнем хосте с доступом через nginx), то эти файлы могут стать недоступны. Таким образом, файлы необхдимые
для отображения кастовых страниц ошибок 400, 403, 404, 500 и других должны быть скопированы на внешний хост,
в папку `media/_error` в момент запуска контейнера (с помощью `entrypoint.sh` или инструкций `command`
в `docker-compose.yml`)
. Вот список этих файлов (путь указан относительно папки `static`):
* svgs/favicon.svg
* img/favicon.png
* img/favicon.ico
* svgs/xxx-error.svg
* svgs/404-error.svg
* svgs/500-error.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB