320 lines
207 KiB
JSON
320 lines
207 KiB
JSON
{
|
||
"main": {
|
||
"id": "5324373015726ba8",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "4e9db25a7859d46d",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "b338ee701498f876",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "pdf",
|
||
"state": {
|
||
"file": "00 Inbox/00_базовые_понятия.pdf"
|
||
},
|
||
"icon": "lucide-file-text",
|
||
"title": "00_базовые_понятия"
|
||
}
|
||
},
|
||
{
|
||
"id": "3e242b36cec6a5ec",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "markdown",
|
||
"state": {
|
||
"file": "90 Library/Networking/Веб-аутентификация и авторизация.md",
|
||
"mode": "preview",
|
||
"source": false,
|
||
"backlinks": false
|
||
},
|
||
"icon": "lucide-file",
|
||
"title": "Веб-аутентификация и авторизация"
|
||
}
|
||
}
|
||
],
|
||
"currentTab": 1
|
||
}
|
||
],
|
||
"direction": "vertical"
|
||
},
|
||
"left": {
|
||
"id": "a9c2d5e65288011a",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "383cca303cf4b57d",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "27e6486165131cfa",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "file-explorer",
|
||
"state": {
|
||
"sortOrder": "alphabetical",
|
||
"autoReveal": true
|
||
},
|
||
"icon": "lucide-folder-closed",
|
||
"title": "Files"
|
||
}
|
||
},
|
||
{
|
||
"id": "66079465678173e5",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "search",
|
||
"state": {
|
||
"query": "tag:#gym",
|
||
"matchingCase": false,
|
||
"explainSearch": false,
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical"
|
||
},
|
||
"icon": "lucide-search",
|
||
"title": "Search"
|
||
}
|
||
},
|
||
{
|
||
"id": "c2541ce190da912e",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "bookmarks",
|
||
"state": {},
|
||
"icon": "lucide-bookmark",
|
||
"title": "Bookmarks"
|
||
}
|
||
},
|
||
{
|
||
"id": "673ce6e6c09cfc9c",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "tag",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"useHierarchy": true,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-tags",
|
||
"title": "Tags"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 207
|
||
},
|
||
"right": {
|
||
"id": "38c591aa0966839e",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "86a193b1d3159ff8",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "06940eb960fc1db5",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "terminal:terminal",
|
||
"state": {
|
||
"terminal:terminal": {
|
||
"cwd": "/home/ada/Documents/Vaults/SecondBrain",
|
||
"focus": false,
|
||
"profile": {
|
||
"args": [
|
||
"--login"
|
||
],
|
||
"executable": "/usr/bin/zsh",
|
||
"followTheme": true,
|
||
"name": "ZSH",
|
||
"platforms": {
|
||
"darwin": false,
|
||
"linux": true
|
||
},
|
||
"pythonExecutable": "python3",
|
||
"restoreHistory": true,
|
||
"rightClickAction": "copyPaste",
|
||
"successExitCodes": [
|
||
"0",
|
||
"SIGINT",
|
||
"SIGTERM"
|
||
],
|
||
"terminalOptions": {
|
||
"fontFamily": "FiraCode Nerd Font Mono",
|
||
"documentOverride": null
|
||
},
|
||
"type": "integrated",
|
||
"useWin32Conhost": false
|
||
},
|
||
"profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055",
|
||
"serial": {
|
||
"columns": 48,
|
||
"data": "\u001b[48;5;22m \u001b[2m \u001b[38;2;137;180;250;22mrea\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;244mTextarea</\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;250mtextarea\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>\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-html-forms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: HTML\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m forms</\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[19X\r\n\u001b[39m \u001b[2m429 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250mdiv\u001b[38;2;147;153;178m>\u001b[29X\r\n\u001b[39m \u001b[2m430 \u001b[32;22m+\u001b[38;2;205;214;244m </\u001b[38;2;137;180;250msection\u001b[38;2;147;153;178m>\u001b[27X\r\n\u001b[39m \u001b[2m431 \u001b[32;22m+\u001b[39X\r\n\u001b[39m \u001b[2m432 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250msection\u001b[38;2;205;214;244m class=\"block\" id=\"\u001b[38;2;137;180;250mblock-4\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[1X\r\n\u001b[39m \u001b[2m433 \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Блок 4. CSS selectors и базовые\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m свойства</\u001b[38;2;137;180;250mh2\u001b[38;2;147;153;178m>\u001b[25X\r\n\u001b[39m \u001b[2m434 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"cards\"\u001b[38;2;147;153;178m>\u001b[16X\r\n\u001b[39m \u001b[2m435 \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-css-u\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mniversal\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;250mh\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22m3\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;250m*\u001b[38;2;205;214;244m` выбирает все элементы. Часто п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрименяют для сброса `\u001b[38;2;137;180;250mbox-sizing\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>\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-css-selectors\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Подробно: CSS selectors</\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[2X\r\n\u001b[39m \u001b[2m436 \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-css-b\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22masic-selectors\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;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;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;250mp\u001b[38;2;205;214;244m` выбирает теги\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;249;226;175;22mcard\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;249;226;175mmain\u001b[38;2;205;214;244m` — уникальный id.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m ID специфичнее класса и тега.</\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-css-selector\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22ms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS selectors</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250marticle\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\u001b[38X\r\n\u001b[39m \u001b[2m437 \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-css-c\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mombinators\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;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;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`A B` — потомок\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `A \u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m B`\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 `A \u001b[38;2;147;153;178m+\u001b[38;2;205;214;244m B` — следующий\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 `A \u001b[38;2;147;153;178m~\u001b[38;2;205;214;244m B` — последующие соседи.</\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-css-se\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mlectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS selectors</\u001b[38;2;137;180;250ma\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mrticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m438 \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-css-a\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mttr\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`\u001b[38;2;147;153;178m[\u001b[38;2;249;226;175matt\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mr\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;249;226;175mtype\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"email\"\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;137;180;250ma\u001b[38;2;147;153;178m[\u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m^=\u001b[38;2;166;227;161m\"https\"\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;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-lin\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mk\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-selectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CS\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mS selectors</\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[2m439 \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-css-p\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mseudo\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`\u001b[38;2;147;153;178m:\u001b[38;2;205;214;244mhover`\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;244mfocus`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;147;153;178m:\u001b[38;2;205;214;244mchecked`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;147;153;178m:\u001b[38;2;205;214;244mnth-child\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еста в DOM.</\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\" h\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mref=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-selectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS se\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlectors</\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[2m440 \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-css-g\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mroup\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Селекторы через запятую получают одно\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mправило: `\u001b[38;2;137;180;250mh1\u001b[38;2;147;153;178m,\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;250mh3\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m{\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mmargin\u001b[38;2;148;226;213m:\u001b[38;2;205;214;244m \u001b[38;2;250;179;135m0\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;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-css-s\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22melectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS selectors</\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;22marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m441 \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-css-c\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mascade\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Каскад решает конфликт правил\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;147;153;178m,\u001b[38;2;205;214;244m например `color` и `\u001b[38;2;137;180;250mfont-family\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>\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-css-s\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22melectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS selectors</\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;22marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m442 \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-css-s\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mpecificity\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ловный вес: inline > ID > классы/\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>\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-selectors\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m selectors</\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[2m443 \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-box-m\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22model\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стоит из \u001b[38;2;137;180;250mcontent\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 и mar\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mgin. `\u001b[38;2;137;180;250mbox-sizing\u001b[38;2;205;214;244m: \u001b[38;2;137;180;250mborder-box\u001b[38;2;205;214;244m` включает\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mpadding и border в заданную ширину.</\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<\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-css-pro\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mps\u001b[38;2;205;214;244m\"\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;250marticle\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m444 \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-backg\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mround\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 свойства: `\u001b[38;2;137;180;250mbackground-color\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mbackgro\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mund-image\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mbackground-repeat\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mbackg\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mround-position\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mbackground-size\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<\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-css-pro\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mps\u001b[38;2;205;214;244m\"\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;250marticle\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m445 \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-margi\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mn-align\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;244mMargin и выравнивание блок\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`margin` задаёт внешний отсту\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;250mma\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mrgin-left\u001b[38;2;205;214;244m/right: auto`.</\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;250mde\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtail-link\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-props\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: CSS свойства</\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[2m446 \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-fonts\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;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`\u001b[38;2;137;180;250mfont-family\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mfon\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mt-size\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mfont-weight\u001b[38;2;205;214;244m`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mfont-style\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н текста.</\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-css-props\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS свойства\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[2m447 \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-text-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22malign\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`\u001b[38;2;137;180;250mtext-align\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;250mte\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mxt-decoration\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\" h\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mref=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-props\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS свойст\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[2m448 \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-line-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mletter\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;137;180;250mline-height\u001b[38;2;205;214;244m и \u001b[38;2;137;180;250mletter-spacin\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mg\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`\u001b[38;2;137;180;250mline-height\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;250mletter-spacing\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 чем кажется.</\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-lin\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mk\u001b[38;2;205;214;244m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-css-props\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: CSS св\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[2m449 \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-text-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mshadow\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`\u001b[38;2;137;180;250mtext-sh\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22madow\u001b[38;2;205;214;244m: x y blur color;` добавляет тень к\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;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 clas\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ms=\"\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-css-props\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робно: CSS свойства</\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[2m450 \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[2m451 \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[2m452 \u001b[32;22m+\r\n\u001b[39m \u001b[2m453 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250msection\u001b[38;2;205;214;244m class=\"block\" id=\"\u001b[38;2;137;180;250mblock-5\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m454 \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Блок 5. Flexbox Layout. Grid La\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22myout</\u001b[38;2;137;180;250mh2\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m455 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"cards\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m456 \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-flex-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcontainer\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;244mFlex-контейнер и оси</\u001b[38;2;137;180;250mh3\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>\u001b[38;2;205;214;244m`display: flex` создаёт \u001b[38;2;137;180;250mflex-контей\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mнер\u001b[38;2;205;214;244m. Главная ось задаётся `\u001b[38;2;137;180;250mflex-directi\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mon\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;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-layou\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Подробно: Flex/Grid</\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[2m457 \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-inlin\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22me-flex\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;250mflex-контейнер\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mh3\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>\u001b[38;2;205;214;244m`display: \u001b[38;2;137;180;250minline-flex\u001b[38;2;205;214;244m` делает конте\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mйнер \u001b[38;2;137;180;250mflex-контейнером\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;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-layout\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Flex/Grid</\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;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m458 \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-flex-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22malign\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`\u001b[38;2;137;180;250mjustify-content\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;250malign-items\u001b[38;2;205;214;244m` — по поперечной. `\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22malign-content\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\" href\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-layout\u001b[38;2;205;214;244m\"\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</\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mrticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m459 \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-flex-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mgrow\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;137;180;250mflex-grow\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m shrink\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m basis</\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`\u001b[38;2;137;180;250mflex-basis\u001b[38;2;205;214;244m` — базовый размер\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mflex\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22m-grow\u001b[38;2;205;214;244m` — как элемент растёт\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `\u001b[38;2;137;180;250mflex-shri\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mnk\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\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-lay\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22mout\u001b[38;2;205;214;244m\"\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</\u001b[38;2;137;180;250marticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m460 \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-grid-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mcontainer\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;244mGrid-контейнер</\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`d\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22misplay: grid` создаёт двумерную сетку.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mКолонки задаются `\u001b[38;2;137;180;250mgrid-template-columns\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;250mgrid-template-rows\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;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m 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-layout\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одробно: Flex/Grid</\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[2m461 \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-fr\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;137;180;250;22mh3\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mВеличина fr</\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`fr` — доля свобо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдного пространства \u001b[38;2;137;180;250mgrid-контейнера\u001b[38;2;205;214;244m. `1f\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mr 2fr` делит свободное место в пропорци\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи 1 к 2.</\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-layout\u001b[38;2;205;214;244m\"\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</\u001b[38;2;137;180;250ma\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mrticle\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m462 \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-repea\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mt-minmax\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;244mrepeat и minmax</\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mepeat(3\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m 1fr)` повторяет трек. `minmax(\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m200px\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m 1fr)` задаёт минимум и максимум\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\" href=\"\u001b[38;2;147;153;178m#\u001b[38;2;249;226;175md-layout\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Flex/Grid<\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[2m463 \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[2m464 \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[2m465 \u001b[32;22m+\r\n\u001b[39m \u001b[2m466 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250msection\u001b[38;2;205;214;244m class=\"block\" id=\"\u001b[38;2;137;180;250mblock-djan\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mgo\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m467 \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Блоки 6-12. Django</\u001b[38;2;137;180;250mh2\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m468 \u001b[32;22m+\u001b[38;2;205;214;244m <\u001b[38;2;137;180;250mdiv\u001b[38;2;205;214;244m class=\"cards\"\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m469 \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-models\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одель — класс-наследник `models\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mModel\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 Модели обычно лежат в `models\u001b[38;2;147;153;178m.\u001b[38;2;249;226;175mpy\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\" href=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"\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Подробно: Django mod\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mels</\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[2m470 \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-prima\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mry-key\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чный ключ уникально идентифицирует запи\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 Django создаёт\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m поле `id` автоматически.</\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;137;180;250;22mdetail-link\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По\r\n\u001b[39m \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>\r\n\u001b[39m \u001b[2m471 \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-migra\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtions\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`makemigrati\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mons` создаёт файлы миграций из изменени\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 `migrate` применяет их к баз\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-models\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: Django m\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22models</\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[2m472 \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-meta\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>\u001b[38;2;205;214;244mClass Meta</\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`class Meta` зад\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mаёт метаданные модели: `ordering`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `ver\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mbose_name`\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m `db_table`\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-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>\r\n\u001b[39m \u001b[2m473 \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-null-\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mblank\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;244mnull=True и blank=True</\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;22mp\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244m`null=True` разрешает `NULL` в БД. `b\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlank=True` разрешает пустое значение на\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m уровне форм/валидации Django.</\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-model\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22ms\u001b[38;2;205;214;244m\"\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mПодробно: 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\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m>\r\n\u001b[39m \u001b[2m474 \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-charf\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mield\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;244mCharField</\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`CharField`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mхранит короткую строку и требует `max_l\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mength`. Для длинного текста обычно беру\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт `TextField`.</\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\" 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Подробно: Dja\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mngo 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>\r\n\u001b[39m \u001b[2m475 \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-forei\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mgnkey\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;244mForeignKey</\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`ForeignKe\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22my` задаёт связь многие-к-одному. `on_de\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mlete` определяет поведение при удалении\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m связанного объекта; `related_name` зад\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;250mde\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mtail-link\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Подр\r\n\u001b[39m \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>\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 создаёт промежуточную таблицу\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через `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>\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>\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>\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>\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)` возвращает\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_<field\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идирует поле, `clean()` — форму целиком\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m. `widget` управляет HTML-представление\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[2m690 \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;250mform\u001b[38;2;147;153;178m.\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22msave\u001b[38;2;205;214;244m()` есть у ModelForm; серверная вал\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 `required` не\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[2m691 \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-forms\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[2m692 \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[2m693 \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[2m694 \u001b[32;22m+\r\n\u001b[39m \u001b[2m695 \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;175mtop\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[2m696 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mmain\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m697 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mbody\u001b[38;2;147;153;178m>\r\n\u001b[39m \u001b[2m698 \u001b[32;22m+\u001b[38;2;205;214;244m</\u001b[38;2;137;180;250mhtml\u001b[38;2;147;153;178m>\r\n\u001b[0m\u001b[48X\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mHTML собран. Проверяю технические вещи:\r\n повторяющиеся якоря, наличие целевых файлов и\r\n возможность напечатать PDF через headless\r\n Chromium.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mwhich\u001b[38;2;205;214;244m chromium\r\n\u001b[39;2m └ /usr/bin/chromium\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"id=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m[^\"\u001b[38;2;205;214;244m]+\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\" \"\u001b[38;2;205;214;244m90 Library/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mвеб-разработке.html\u001b[38;2;166;227;161m\"\r\n\u001b[39;2m └ zsh:1: unmatched \"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mstat\r\n\u001b[39;2m └ .obsidian/workspace.json | 28 ++++++++++++\r\n\u001b[0m \u001b[2m++--------------\r\n\u001b[0m \u001b[2m 1 file changed, 14 insertions(+), 14\r\n\u001b[0m \u001b[2mdeletions(-)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mОдна проверочная команда сломалась на\r\n кавычках, без влияния на файлы. Повторяю её\r\n нормальной quoting-командой и сразу исправлю\r\n найденные дубли якорей, если будут.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git status\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mshort\r\n\u001b[39;2m └ M .obsidian/workspace.json\r\n\u001b[0m \u001b[2m?? \"90 Library/Programming/Web/Подготовка к\r\n\u001b[0m \u001b[2mэкзамену по веб-разработке.html\"\r\n\r\n\u001b[31;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'id=\"[^\"]+\"'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ (no output)\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[36;22mrg\u001b[0m с шаблоном для атрибутов не поймал HTML,\r\n поэтому проверю через более простые поиски по\r\n \u001b[36mid=\u001b[0m и ссылкам. Заодно вижу, что \u001b[36m.obsidian/\r\n\u001b[0m \u001b[36mworkspace.json\u001b[0m уже изменён вне моей задачи,\r\n его не трогаю.\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"href=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m#[^\"\u001b[38;2;205;214;244m]+\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\" \"\u001b[38;2;205;214;244m90 Library/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mProgramming/Web/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mвеб-разработке.html\u001b[38;2;166;227;161m\"\r\n\u001b[39;2m └ zsh:1: unmatched \"\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"href=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m#s-meta\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mid=\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161ms-meta\u001b[38;2;245;194;231m\\\"\u001b[38;2;166;227;161m\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ 4 matches in 3F:\r\n\r\n … +11 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 300: <a href=\"#s-meta\">Class Meta</a>\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"id=\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Подготовка к экзамену по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mвеб-разработке.html\"\r\n\u001b[39;2m └ 115 matches in 71F:\r\n\r\n … +237 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +20\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл реальный конфликт якоря \u001b[36ms-meta\u001b[0m: HTML\r\n meta-теги и Django \u001b[36mClass Meta\u001b[0m. Исправляю\r\n Django-якорь на отдельный \u001b[36ms-django-meta\u001b[0m.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Web/Подготовка к\r\nэкзамену по веб-разработке.html (\u001b[32m+2\u001b[0m \u001b[31m-2\u001b[0m)\r\n \u001b[2m299 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-migrations\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mМиграци\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mи\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m300 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-meta\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass Meta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;22;22m \u001b[2m300 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-django-meta\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mMeta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m301 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#s-null-blank\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mnull/bl\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mank\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m471 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-migra\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22mtions\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mМиграции\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`makemigrati\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mons` создаёт файлы миграций из изменени\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mй моделей, `migrate` применяет их к баз\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mе данных.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhre\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mf\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-models\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: Django m\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;52m \u001b[2m472 \u001b[31;22m-\u001b[38;2;205;214;244;2m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-meta\"\r\n\u001b[39;22m \u001b[2m \u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass Meta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`class Meta` зад\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mаёт метаданные модели: `ordering`, `ver\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mbose_name`, `db_table`, ограничения и д\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mругие настройки.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-li\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mnk\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-models\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: D\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mjango models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[39;48;5;22;22m \u001b[2m472 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-djang\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mo-meta\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mClass Meta\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`class Me\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mta` задаёт метаданные модели: `ordering\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m`, `verbose_name`, `db_table`, ограниче\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mния и другие настройки.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"de\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mtail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-models\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобно: Django models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\u001b[38;2;148;226;213m>\r\n\u001b[0m \u001b[2m473 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250marticle\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mclass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"card\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mid\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"s-null-\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22mblank\"\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mnull=True и blank=True\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mh3\u001b[38;2;148;226;213m><\r\n\u001b[0m \u001b[2m \u001b[38;2;137;180;250;22mp\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244m`null=True` разрешает `NULL` в БД. `b\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mlank=True` разрешает пустое значение на\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m уровне форм/валидации Django.\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250mp\u001b[38;2;148;226;213m><\u001b[38;2;137;180;250ma\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mcl\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mass\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"detail-link\"\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mhref\u001b[38;2;148;226;213m=\u001b[38;2;166;227;161m\"#d-django-model\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22ms\"\u001b[38;2;148;226;213m>\u001b[38;2;205;214;244mПодробно: Django models\u001b[38;2;148;226;213m</\u001b[38;2;137;180;250ma\u001b[38;2;148;226;213m></\u001b[38;2;137;180;250marticle\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22m>\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mperl\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mne\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'while(/id=\"([^\"]+)\"/g){print\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m\"$1\\n\"}'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"90 Library/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mПодготовка к экзамену по\r\n\u001b[39;2m │ … +1 lines\r\n └ (no output)\r\n\r\n◦\u001b[1CWorking\u001b[1C(8m 34s • esc to interrupt)\r\n\r\n\u001b[48;5;238;22m \u001b[47X\r\n\u001b[1m›\u001b[22m \u001b[2mSummarize recent commits\r\n\u001b[22m \r\n\u001b[0m\u001b[2X\u001b[2C\u001b[38;2;246;226;183mgpt-5.5 high\u001b[39;2m · \u001b[38;2;171;223;167;22m~/Documents/Vaults/SecondBrain\u001b[1X\u001b[2A\u001b[45D\u001b[0m",
|
||
"rows": 34,
|
||
"scrollLine": -1
|
||
}
|
||
}
|
||
},
|
||
"pinned": true,
|
||
"icon": "terminal",
|
||
"title": "Terminal: ⠋ SecondBrain"
|
||
}
|
||
},
|
||
{
|
||
"id": "1ef10fc51fc1f1e1",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "git-view",
|
||
"state": {},
|
||
"pinned": true,
|
||
"icon": "git-pull-request",
|
||
"title": "Source Control"
|
||
}
|
||
},
|
||
{
|
||
"id": "394fb6e28d09b8f3",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "all-properties",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-archive",
|
||
"title": "All properties"
|
||
}
|
||
},
|
||
{
|
||
"id": "e51be669e29cd994",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "backlink",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical",
|
||
"showSearch": false,
|
||
"searchQuery": "",
|
||
"backlinkCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-coming-in",
|
||
"title": "Backlinks for Основы HTML (структура, таблицы, формы)"
|
||
}
|
||
},
|
||
{
|
||
"id": "86ea4ddeaafff092",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outgoing-link",
|
||
"state": {
|
||
"file": "90 Library/Programming/Ruby On Rails/Sidekiq - основа работы.md",
|
||
"linksCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-going-out",
|
||
"title": "Outgoing links from Sidekiq - основа работы"
|
||
}
|
||
},
|
||
{
|
||
"id": "a0ffd3bace615787",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outline",
|
||
"state": {
|
||
"file": "00 Inbox/Экзамен - MOC.md",
|
||
"followCursor": false,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-list",
|
||
"title": "Outline of Экзамен - MOC"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 482
|
||
},
|
||
"left-ribbon": {
|
||
"hiddenItems": {
|
||
"switcher:Open quick switcher": false,
|
||
"graph:Open graph view": false,
|
||
"canvas:Create new canvas": false,
|
||
"daily-notes:Open today's daily note": false,
|
||
"templates:Insert template": false,
|
||
"command-palette:Open command palette": false,
|
||
"markdown-importer:Open format converter": false,
|
||
"random-note:Open random note": false,
|
||
"audio-recorder:Start/stop recording": false,
|
||
"bases:Create new base": false,
|
||
"omnisearch:Omnisearch": false,
|
||
"templater-obsidian:Templater": false,
|
||
"obsidian-git:Open Git source control": false,
|
||
"obsidian-excalidraw-plugin:New drawing": false,
|
||
"terminal:Open terminal": false,
|
||
"3d-graph-new:Global 3D Graph": false
|
||
}
|
||
},
|
||
"active": "3e242b36cec6a5ec",
|
||
"lastOpenFiles": [
|
||
"90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.html",
|
||
"90 Library/Programming/Programming - MOC.md",
|
||
"90 Library/Programming/Web/Адаптивность, Flexbox и Grid.md",
|
||
"90 Library/Programming/Web/Основы веб-разработки.md",
|
||
"90 Library/Programming/Web/Основы Bootstrap.md",
|
||
"90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"90 Library/Programming/Web/Основы, селекторы и блочная модель.md",
|
||
"90 Library/Programming/Web/Экзамен - Веб-ориентированные системы.md",
|
||
"90 Library/Networking/OAuth 2.0.md",
|
||
"90 Library/Networking/Веб-аутентификация и авторизация.md",
|
||
"90 Library/Networking/Подсети и маска подсети.md",
|
||
"90 Library/Networking/Сетевые порты.md",
|
||
"90 Library/Networking/Протоколы/URI, URL, URN.md",
|
||
"90 Library/Networking/Протоколы/HTTP, HTTPS и HTTP3.md",
|
||
"00 Inbox/Подготовка к экзамену по Веб-Разработке.md",
|
||
"00 Inbox/00_базовые_понятия.pdf",
|
||
"99 System/Archive/Основные команды git.md",
|
||
"99 System/Archive/Подготовка к защите ЛР2.md",
|
||
"99 System/Archive/Подготовка к экзамену по Экономическому анализу.md",
|
||
"AGENTS.md",
|
||
"90 Library/Other/Сканер отпечатка пальцев.md",
|
||
"00 Inbox/Краткая теория с важными формулами по нечетким выводам.sync-conflict-20260603-140755-23DMR5O.md",
|
||
"90 Library/Programming/Python/Работа с формами и CUD.md",
|
||
"90 Library/Programming/Python/Представления, шаблоны и CBV.md",
|
||
"90 Library/Programming/Python/Модели и ORM.md",
|
||
"90 Library/Programming/Python/Базовый синтаксис и основы.md",
|
||
"04 Tools/🛠️ Неоконченные заметки.sync-conflict-20260603-110335-23DMR5O.md",
|
||
"04 Tools/StudyTracker/Courses",
|
||
"04 Tools/StudyTracker/Books",
|
||
"04 Tools/SocialBase/04 Другие",
|
||
"04 Tools/SocialBase/03 Коллеги",
|
||
"04 Tools/SocialBase/02 Друзья",
|
||
"04 Tools/SocialBase/01 Семья",
|
||
"04 Tools/StudyTracker",
|
||
"04 Tools/SocialBase",
|
||
"04 Tools",
|
||
"99 System/Cache/Pasted image 20260526204029.png",
|
||
"99 System/Cache/Pasted image 20260526203848.png",
|
||
"99 System/Cache/Pasted image 20260526203807.png",
|
||
"99 System/Cache/Pasted image 20260521134256.png",
|
||
"99 System/Cache/Pasted image 20260521134238.png",
|
||
"99 System/Cache/Pasted image 20260521134228.png",
|
||
"99 System/Cache/Pasted image 20260521134207.png",
|
||
"99 System/Cache/Pasted image 20260521133832.png",
|
||
"99 System/Cache/Pasted image 20260521133824.png",
|
||
"99 System/Cache/Pasted image 20260521133344.png",
|
||
"00 Inbox/Untitled.canvas"
|
||
]
|
||
} |