Теги внутри head
В `
` обычно находятся `diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json
index 634f747..dc0536f 100644
--- a/.obsidian/workspace.json
+++ b/.obsidian/workspace.json
@@ -26,15 +26,12 @@
"id": "3e242b36cec6a5ec",
"type": "leaf",
"state": {
- "type": "markdown",
+ "type": "pdf",
"state": {
- "file": "90 Library/Networking/Веб-аутентификация и авторизация.md",
- "mode": "preview",
- "source": false,
- "backlinks": false
+ "file": "90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.pdf"
},
- "icon": "lucide-file",
- "title": "Веб-аутентификация и авторизация"
+ "icon": "lucide-file-text",
+ "title": "Подготовка к экзамену по веб-разработке"
}
}
],
@@ -159,7 +156,7 @@
"profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055",
"serial": {
"columns": 48,
- "data": "\u001b[48;5;22m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django models\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[6X\r\n\u001b[39m \u001b[2m476 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-manyt\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22momany\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mMany-\u001b[38;2;137;180;250mto-\u001b[38;2;205;214;244mMany\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`ManyToM\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22manyField` задаёт связь многие-ко-многим\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m. Django создаёт промежуточную таблицу\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mавтоматически\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m либо можно указать свою\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчерез `through`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-li\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mnk\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-models\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: D\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mjango models\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[13X\r\n\u001b[39m \u001b[2m477 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mFBV\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mFunction-Based View — фу\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнкция\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m которая принимает `request` и во\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзвращает `HttpResponse`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `render`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `red\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mirect` или ошибку.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mlink\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Dj\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mango FBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[17X\r\n\u001b[39m \u001b[2m478 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-rende\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mr\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mrender\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`render(request\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mt\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22memplate\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m context)` рендерит шаблон с ко\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнтекстом и возвращает `HttpResponse`.\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django FBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticl\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22me\u001b[38;2;147;153;178m>\u001b[37X\r\n\u001b[39m \u001b[2m479 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-conte\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mxt\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПередача данных в шаблон\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mДанные передаются словарём context: кл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mючи становятся именами переменных в шаб\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mлоне.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22md-django-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django FBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\u001b[30X\r\n\u001b[39m \u001b[2m480 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-get-o\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mbject\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mОбъект или 404\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`get_o\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mbject_or_404(Model\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m pk=pk)` возвращает\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобъект или генерирует HTTP 404\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m если за\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mписи нет.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" hre\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mf=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django FBV<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m481 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-routi\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mng-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМаршрутизация FBV\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`urlpatterns` функция передаётся напрям\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mую: `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m(\"posts/<int\u001b[38;2;147;153;178m:\u001b[38;2;205;214;244mpk>/\", view\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ms\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mdetail\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m name=\"detail\")`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-fbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django FBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m482 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-t\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mypes\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mTemplateView\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m DetailView\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m Lis\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mtView\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`TemplateView` показывает\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mшаблон\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `DetailView` — один объект\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `Li\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mstView` — список объектов.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m483 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-m\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22models\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCBV и модели\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mДля `Lis\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mtView`/`DetailView` можно указать `mode\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ml = Post`; Django сам построит queryset\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m и стандартные имена шаблонов.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m cl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mass=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mПодробно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m484 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-e\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mxtra\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mДополнительные данные\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mДополнительный контекст обычно добавляю\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт через `get_context_data`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m вызывая `su\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mper()` и дополняя словарь.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m485 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-d\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mefault-vars\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПеременные по умолчани\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mю\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`ListView` отдаёт `object_list\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m` и `modelname_list`; `DetailView` отда\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mёт `\u001b[38;2;137;180;250mobject\u001b[38;2;205;214;244m` и `modelname`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m486 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-q\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mueryset\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПереопределение выгрузки\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`get_queryset()` меняет список об\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mъектов, `get_object()` — получение одно\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mго объекта. Часто используют фильтрацию\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m по пользователю или статусу.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m cla\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mss=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mП\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодробно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m487 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-pagin\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mation\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПаджинация\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ `ListVie\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mw` достаточно задать `paginate_by = N`;\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m в шаблоне появится `page_obj`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m c\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlass=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mПодробно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m488 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-t\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22memplates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mШаблоны по умолчанию\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mДля `DetailView`: `app/model_detail\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mhtml\u001b[38;2;205;214;244m`; для `ListView`: `app/model_list\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mhtml\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m если не задан `template_name`.\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticl\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22me\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m489 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-s\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22muper\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВызов базовой логики\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mП\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mри переопределении методов вроде `get_c\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22montext_data` обычно сначала вызывают `s\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22muper()`, чтобы не потерять стандартный\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mконтекст.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" hre\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mf=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django CBV<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m490 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-cbv-r\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mouting\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМаршрутизация CBV\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mКл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mасс подключается через `\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mas_view\u001b[38;2;205;214;244m()`: `\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22math\u001b[38;2;205;214;244m(\"\"\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m PostListView\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mas_view\u001b[38;2;205;214;244m(), name=\"p\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22most_list\")`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-cbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django C\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m491 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mo-urls\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango URLs\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m()`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m задаёт маршрут, view\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m kwargs и имя. `r\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22me_path()` использует regex. `reverse()`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m строит URL по имени маршрута.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m cl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mass=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-urls\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mПодробно: Django URLs\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m492 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mo-templates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mЯзык шаблонов Django\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПеременные пишутся как `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m{ value\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m}\u001b[38;2;205;214;244m}`, теги как `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% for %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m`, фильтры как\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m{ name|lower \u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m}`. Наследование делает\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mся через `extends` и `block`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m cla\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mss=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django-templa\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mtes\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django templates\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mar\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m493 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mo-queries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango queries\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mQu\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22merySet ленивый и цепочечный. Важно знат\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mь `get`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mfilter\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `exclude`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `order_by\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `annotate`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `aggregate`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `Q`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `F`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mselect_related`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `prefetch_related`.\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-django\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22m-queries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django queries\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m494 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"card\" id=\"\u001b[38;2;137;180;250ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mo-forms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango forms\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`forms\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m.\u001b[38;2;249;226;175mForm\u001b[38;2;205;214;244m` — ручная форма\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `ModelForm` стро\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mится по модели. Валидация через `is_val\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mid`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `cleaned_data`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `clean_field`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `cl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mean`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22md-django-forms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django forms<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m495 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m496 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250msection\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m497 \u001b[32;22m+\r\n\u001b[39m \u001b[2m498 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250msection\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mdetails\u001b[38;2;205;214;244m\" id=\"\u001b[38;2;137;180;250mdetails\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m499 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh2\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробные заметки\u001b[38;2;137;180;250mh2\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m500 \u001b[32;22m+\r\n\u001b[39m \u001b[2m501 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-ip\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m502 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mIP-адресация\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m IPv4\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m IPv6\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m503 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/IP-адр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mес\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mIP-адрес\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>,\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"../../Net\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mworking/Протоколы/IPv6\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mIPv6\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m504 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ интернете используются адрес\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа разных уровней: физический адрес инте\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрфейса\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m сетевой IP-адрес и символьное D\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mNS-имя. IPv4 записывается четырьмя окте\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтами\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m например `192.168.1.10`. IPv6 исп\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mользует 128 бит и записывается группами\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m шестнадцатеричных чисел.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m505 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте часто с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпрашивают: IPv4 = 32 бита\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m IPv6 = 128 б\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mит\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m IPv4 октет = 0-255\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m IPv6 не совмест\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mим напрямую с IPv4.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m506 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-ip-ad\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mdressing\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m507 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m508 \u001b[32;22m+\r\n\u001b[39m \u001b[2m509 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-tcp\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m510 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mTCP\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m511 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/TCP vs\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m UDP\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mTCP vs UDP\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m512 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mTCP устанавливает соединение п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mеред передачей данных\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m делит данные на\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mсегменты\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m нумерует их\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m подтверждает дос\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтавку и повторяет потерянные данные. За\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m это платит дополнительными задержками\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи служебным трафиком.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m513 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: TCP —\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнадёжный\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mconnection-oriented\u001b[38;2;205;214;244m; UDP — бы\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mстрее и проще\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m но без гарантий доставки\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m и порядка.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m514 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-tcp\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m515 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m516 \u001b[32;22m+\r\n\u001b[39m \u001b[2m517 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-subnet\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m518 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодсети и маска подсети\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m519 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Подсети и маска\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mподсети\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодсети и маска подсети\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m520 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМаска подсети определяет\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m каки\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе биты IPv4-адреса относятся к сети\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m а\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mкакие к хосту. Запись `/24` равна маске\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m `255.255.255.0`: первые 24 бита — сеть\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m последние 8 — хосты.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m521 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mЗапомнить: чем\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбольше префикс `/N`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m тем меньше адресов\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m в подсети.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m522 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-subne\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mt\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m523 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m524 \u001b[32;22m+\r\n\u001b[39m \u001b[2m525 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-nat\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m526 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mNAT\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m приватные адреса\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m localh\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22most\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m527 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/NAT\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mNAT\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m <\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"../../Networking/Подсети и ма\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mска подсети\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодсети и маска подсети\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m528 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mNAT переводит приватные IPv4-а\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдреса во внешний публичный адрес. Часты\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе приватные диапазоны: `10.0.0.0/8`, `1\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m72.16.0.0/12`, `192.168.0.0/16`. Loopba\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mck-диапазон `127.0.0.0/8` не использует\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mся для обмена между узлами сети; `127.0\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m.0.1` и `localhost` указывают на текущу\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mю машину.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m529 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: NAT эк\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mономит публичные IPv4 и скрывает внутре\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mннюю адресацию\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m но ломает прямую \u001b[38;2;137;180;250mend-to\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22m-end\u001b[38;2;205;214;244m связность.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m530 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-nat-l\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mocalhost\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m531 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m532 \u001b[32;22m+\r\n\u001b[39m \u001b[2m533 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-dns\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m534 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDNS и DNS-серверы\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m535 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/DNS\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDNS\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m536 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDNS — распределённая база данн\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mых\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m которая по доменному имени возвраща\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет IP-адрес или другие записи. Типичная\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m цепочка: локальный кэш/hosts\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m resolver\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m провайдера\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mroot-серверы\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m TLD-серверы\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m авторитативные серверы домена.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m537 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: root н\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе знает IP конкретного сайта\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m он направ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mляет к TLD; авторитативный сервер знает\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m записи домена.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m538 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-dns\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m539 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m540 \u001b[32;22m+\r\n\u001b[39m \u001b[2m541 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-http\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m542 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP и HTTP-сообщения\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m543 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/HTTP\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mHTTPS и HTTP3\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTTPS и HTTP/3<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m544 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP — протокол прикладного ур\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mовня. Запрос и ответ состоят из стартов\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mой строки\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m заголовков\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m пустой строки и\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнеобязательного тела. Методы описывают\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдействие над ресурсом\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m заголовки переда\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mют метаданные\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m коды ответа показывают р\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mезультат обработки.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m545 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mtable\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mth\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМетод\u001b[38;2;137;180;250mth\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mth\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСмыс\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mл\u001b[38;2;137;180;250mth\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`GET`\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПолучи\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mть ресурс\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`POST`\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mОтправить данные\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`P\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mUT`\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСоздать/заменить ресурс\u001b[38;2;137;180;250mtd\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`PATCH`\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mЧастично\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mизменить ресурс\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`DELET\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mE`\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mУдалить ресурс\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mtr\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mta\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mble\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m546 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `4xx`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m— проблема на стороне клиента\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `5xx` —\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпроблема на стороне сервера.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m547 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-http\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mНазад к HTTP\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m · <\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-http-me\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mssage\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к HTTP-сообщениям\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m548 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m549 \u001b[32;22m+\r\n\u001b[39m \u001b[2m550 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-https\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m551 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTPS\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m552 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/HTTP\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mHTTPS и HTTP3\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTTPS и HTTP/3<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m553 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTPS — это HTTP\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m защищённый T\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mLS. Сертификат связывает домен с ключам\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи и подтверждает подлинность сервера. T\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mLS обеспечивает шифрование\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m целостность\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m и защиту от подмены трафика.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m554 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: HTTP п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mорт `80`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTTPS порт `443`; Basic auth\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбез HTTPS небезопасен.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m555 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-https\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m556 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m557 \u001b[32;22m+\r\n\u001b[39m \u001b[2m558 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-http3\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m559 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP/3\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m560 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/HTTP\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mHTTPS и HTTP3\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTTPS и HTTP/3<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m561 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTTP/3 переносит HTTP на QUIC\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mповерх UDP. QUIC делает потоки независи\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mмыми: потеря пакета не блокирует все за\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпросы внутри соединения\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m как это возмож\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mно в HTTP/2 поверх TCP. TLS 1.3 встроен\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m в QUIC.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m562 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: HTTP/3\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m не меняет методы и коды HTTP\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m меняет т\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mранспорт: UDP/QUIC вместо TCP.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m563 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-http3\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m564 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m565 \u001b[32;22m+\r\n\u001b[39m \u001b[2m566 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-ports\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m567 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСетевые порты\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m568 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Сетевые порты\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСетевые порты\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m569 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПорт уточняет приложение-получ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mателя внутри хоста. Номер порта находит\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mся в диапазоне `0-65535`. Порты TCP и U\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mDP независимы: `53/tcp` и `53/udp` — ра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзные конечные точки.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m570 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМинимум к запом\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mинанию: HTTP `80`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m HTTPS `443`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m DNS `53\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m SSH `22`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m SMTP `25`.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m571 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-ports\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m572 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m573 \u001b[32;22m+\r\n\u001b[39m \u001b[2m574 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-auth\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m575 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mИдентификация\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m аутентификация\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m авторизация\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m576 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Веб-аутентификац\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mия и авторизация\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВеб-аутентификация\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m и авторизация\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m577 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mИдентификация сообщает системе\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m идентификатор субъекта. Аутентификация\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m проверяет подлинность. Авторизация выд\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mаёт права на действия. В HTTP встречают\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mся схемы Basic\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m Digest и Bearer.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m578 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте не пута\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mть: логин — идентификация\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m пароль/код —\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m аутентификация, доступ к админке — авт\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоризация.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m579 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-auth\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m580 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m581 \u001b[32;22m+\r\n\u001b[39m \u001b[2m582 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-oauth\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m583 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mOAuth 2.0\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m584 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/OAuth 2.0\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mOA\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22muth 2.0\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m585 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mOAuth 2.0 позволяет стороннему\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m приложению получить ограниченный досту\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mп к ресурсам пользователя. Вместо парол\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mя приложение получает токен с конкретны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mми правами и сроком жизни.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m586 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: OAuth\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m2.0 — авторизация\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m не парольная аутенти\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mфикация. Для входа поверх OAuth обычно\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнужен OpenID Connect.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m587 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-oauth\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m588 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m589 \u001b[32;22m+\r\n\u001b[39m \u001b[2m590 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-uri\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m591 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mURI\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m URL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m URN\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m592 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../../Networking/Протоколы/URI\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m U\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mRL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m URN\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mURI\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m URL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m URN\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m593 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mURL показывает\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m где находится\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mресурс и как его получить: схема\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m хост\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m порт\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m путь\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m параметры\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m фрагмент. URN з\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mадаёт стабильное имя ресурса без места\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mполучения. URI — общее понятие для иден\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтификаторов ресурсов.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m594 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mГлавная формула\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m: URL ⊂ URI; URN ⊂ URI; не каждый URI я\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвляется URL.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m595 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-uri\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m596 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m597 \u001b[32;22m+\r\n\u001b[39m \u001b[2m598 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-html\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m599 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTML\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m600 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"Основы HTML (структура\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m таблицы\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mформы)\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mОсновы HTML (структура\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m табл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mицы\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m формы)\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m601 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTML описывает структуру докум\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mента. Важно знать базовый каркас\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m роль\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`\u001b[38;2;137;180;250mhead\u001b[38;2;205;214;244m` и `\u001b[38;2;137;180;250mbody\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m блочные и строчные эле\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mменты\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m семантические теги\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m атрибуты `cl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mass`/`id`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m ссылки\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m изображения\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m списки\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи таблицы.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m602 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `class\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m` можно повторять\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `id` должен быть уни\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mкальным; таблицы — для табличных данных\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m не для макета.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m603 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-2\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку HTML\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m604 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m605 \u001b[32;22m+\r\n\u001b[39m \u001b[2m606 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-html-fo\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mrms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m607 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mHTML Forms\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m608 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"Основы HTML (структура\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m таблицы\u001b[38;2;147;153;178m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mформы)\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mОсновы HTML (структура\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m табл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mицы\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m формы)\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m609 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mФорма отправляет данные на сер\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвер. `action` задаёт URL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `method` — сп\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mособ отправки. `\u001b[38;2;137;180;250mlabel\u001b[38;2;205;214;244m` связывается с по\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mлем через `for` и `id`. `name` определя\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет имя параметра при отправке. `require\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22md` и типы \u001b[38;2;137;180;250minput\u001b[38;2;205;214;244m помогают браузерной вал\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mидации\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m но не заменяют серверную провер\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mку.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m610 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: у \u001b[38;2;137;180;250mradi\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mo-кнопок\u001b[38;2;205;214;244m одной группы должен быть одина\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mковый `name`; у `\u001b[38;2;137;180;250mbutton\u001b[38;2;205;214;244m` внутри формы л\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mучше явно задавать `type`.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m611 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-3\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку HTML Forms\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m612 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m613 \u001b[32;22m+\r\n\u001b[39m \u001b[2m614 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-css-sel\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m615 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCSS selectors\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m616 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"Основы\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m селекторы и блочная модел\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mь\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCSS: Основы и селекторы\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m617 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCSS-селектор выбирает элементы\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m к которым применяются правила. Нужно\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mразличать селекторы тега\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m класса\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m id\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m а\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтрибута\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m псевдокласса и комбинаторы. Ка\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mскад учитывает важность\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m специфичность\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи порядок правил.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m618 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСпецифичность:\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22minline > ID > класс/атрибут/псевд\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mокласс > тег/псевдоэлемент.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m619 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-4\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку CSS\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m620 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m621 \u001b[32;22m+\r\n\u001b[39m \u001b[2m622 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-css-pro\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mps\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m623 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCSS базовые свойства\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m624 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"Основы\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m селекторы и блочная модел\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mь\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCSS: Основы и селекторы\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m625 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mБлочная модель состоит из \u001b[38;2;137;180;250mcont\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22ment\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m padding\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m border и margin. `\u001b[38;2;137;180;250mbox-siz\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22ming\u001b[38;2;205;214;244m` меняет расчёт ширины. Текстовые св\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mойства управляют шрифтами\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m выравнивание\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mм\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m межстрочным расстоянием\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m расстоянием\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m между буквами и декором текста. Фон за\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдаётся через группу `background-\u001b[38;2;137;180;250m*\u001b[38;2;205;214;244m`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m626 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `width\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m` при `\u001b[38;2;137;180;250mcontent-box\u001b[38;2;205;214;244m` не включает padding\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/border\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m при `\u001b[38;2;137;180;250mborder-box\u001b[38;2;205;214;244m` включает.\u001b[38;2;137;180;250mdi\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m627 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-4\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку CSS\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m628 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m629 \u001b[32;22m+\r\n\u001b[39m \u001b[2m630 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-layout\u001b[38;2;205;214;244m\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m631 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mFlexbox и Grid\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m632 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"Адаптивность\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m Flexbox и Grid\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mCSS: Адаптивность\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m Flexbox и Grid\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m633 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mFlexbox — одномерная модель ра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mскладки по главной и поперечной оси. Gr\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mid — двумерная сетка строк и колонок. F\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlex удобен для распределения элементов\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mв строке или колонке\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m Grid — для общего\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m макета страницы.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m634 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `\u001b[38;2;137;180;250mjusti\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mfy-content\u001b[38;2;205;214;244m` работает по главной оси fle\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mx\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250malign-items\u001b[38;2;205;214;244m` — по поперечной; `fr`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m— доля свободного пространства Grid.\u001b[38;2;137;180;250md\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22miv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m635 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-5\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Flex/Grid\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m636 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m637 \u001b[32;22m+\r\n\u001b[39m \u001b[2m638 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mmodels\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m639 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango models\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m640 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Модели и ORM\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m Модели и ORM\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m641 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mМодели описывают структуру таб\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mлиц и связи между ними. `CharField` тре\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбует `max_length`; `ForeignKey` задаёт\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`on_delete`; `ManyToManyField` создаёт\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпромежуточную таблицу или использует ук\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mазанную через `through`. Миграции перен\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mосят изменения моделей в БД.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m642 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `null=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mTrue` относится к БД\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `blank=True` — к\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mформам/валидации Django.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m643 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-d\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mjango\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Django\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m644 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m645 \u001b[32;22m+\r\n\u001b[39m \u001b[2m646 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mfbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m647 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango FBV\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m648 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m649 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mFBV — обычная функция-представ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mление. Она принимает `request`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m получае\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт данные\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m вызывает `render` или возвращ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает другой `HttpResponse`. Маршрутизиру\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mется через `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m()` прямой передачей фу\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mнкции.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m650 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `rende\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mr(request\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mtemplate\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m context)` возвраща\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет HTTP-ответ; `get_object_or_404` возв\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mращает объект или 404.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m651 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-d\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mjango\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Django\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m652 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m653 \u001b[32;22m+\r\n\u001b[39m \u001b[2m654 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcbv\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m655 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango CBV\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m656 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m657 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mCBV — классовые представления\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mс готовой логикой. `TemplateView` показ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mывает шаблон\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `ListView` выводит список\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m,\u001b[38;2;205;214;244m `DetailView` выводит один объект. В U\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mRL подключаются через `\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mas_view\u001b[38;2;205;214;244m()`.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m658 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `ListV\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22miew` по умолчанию даёт `object_list`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mDetailView` — `\u001b[38;2;137;180;250mobject\u001b[38;2;205;214;244m`; шаблоны по умол\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчанию `model_list\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mhtml\u001b[38;2;205;214;244m` и `model_detail\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m.\u001b[38;2;249;226;175mhtml\u001b[38;2;205;214;244m`.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m659 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175mblock-d\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mjango\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткому блоку Django\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m660 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m661 \u001b[32;22m+\r\n\u001b[39m \u001b[2m662 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22murls\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m663 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango URLs\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m664 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m665 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`urlpatterns` связывает URL с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпредставлениями. `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m()` использует ro\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mute\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m view\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m kwargs и name. Конвертеры вр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоде `int`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `slug`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `uuid`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mpath\u001b[38;2;205;214;244m` извле\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mкают параметры. `reverse()` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% url %\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m}\u001b[38;2;205;214;244m` строят URL по имени маршрута.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m666 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: не хар\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдкодить URL\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m если есть именованный марш\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрут и `reverse`/`url`.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m667 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-urls\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m668 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m669 \u001b[32;22m+\r\n\u001b[39m \u001b[2m670 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtemplates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m671 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mЯзык шаблонов Django\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m672 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Представления, шаблоны\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи CBV\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Представления\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m шаблон\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mы и CBV\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m673 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDTL использует переменные `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m{\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mvalue \u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m}`, теги `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% tag %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и фильтры `\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m{\u001b[38;2;205;214;244m{ value|\u001b[38;2;137;180;250mfilter\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m}`. Наследование строи\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтся через `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% extends %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% block %\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m}\u001b[38;2;205;214;244m`. Статика подключается через `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% load\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m static %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m` и `\u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m% static 'path' %\u001b[38;2;147;153;178m}\u001b[38;2;205;214;244m`.\u001b[38;2;137;180;250mp\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m674 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: функци\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи Python с произвольными аргументами на\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпрямую из шаблона вызывать нельзя; испо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mльзуют теги\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m фильтры или подготовку дан\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mных во view.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m675 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-templates\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m676 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m677 \u001b[32;22m+\r\n\u001b[39m \u001b[2m678 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mqueries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m679 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango queries\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m680 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Модели и ORM\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m Модели и ORM\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m681 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mQuerySet ленив: запрос выполня\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mется при фактическом обращении к данным\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m. Методы можно цепочечно комбинировать.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m `get()` возвращает один объект или оши\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mбку, `\u001b[38;2;137;180;250mfilter\u001b[38;2;205;214;244m()` возвращает QuerySet\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `a\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mggregate()` возвращает итоговый словарь\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m, `annotate()` добавляет вычисляемые по\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mля к объектам.\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m682 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"exam\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВ тесте: `selec\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mt_related` — для ForeignKey/OneToOne че\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрез JOIN; `prefetch_related` — для Many\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mToMany и обратных связей отдельными зап\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mросами.\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m683 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"back\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175ms-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mo-queries\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mНазад к краткой теме\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m684 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m685 \u001b[32;22m+\r\n\u001b[39m \u001b[2m686 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m class=\"note\" id=\"\u001b[38;2;137;180;250md-django-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mforms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m687 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango forms\u001b[38;2;137;180;250mh3\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m688 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;205;214;244m class=\"\u001b[38;2;137;180;250mnote-source\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mVault: <\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhref=\"../Python/Работа с формами и CUD\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mmd\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mDjango: Работа с формами и CUD\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m689 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`forms\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mForm\u001b[38;2;205;214;244m` описывает форму в\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mручную\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `forms\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mModelForm\u001b[38;2;205;214;244m` строится по м\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодели через `Meta`. `is_valid()` запуск\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает валидацию, `cleaned_data` содержит\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mочищенные данные\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `clean_
В `
` обычно находятся `