diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 4283e70..2746e53 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -25,13 +25,13 @@ "state": { "type": "markdown", "state": { - "file": "00 Inbox/Подготовка к экзамену по Веб-Разработке.md", + "file": "90 Library/Networking/Веб-аутентификация и авторизация.md", "mode": "preview", "source": false, "backlinks": false }, "icon": "lucide-file", - "title": "Подготовка к экзамену по Веб-Разработке" + "title": "Веб-аутентификация и авторизация" } } ], @@ -156,7 +156,7 @@ "profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055", "serial": { "columns": 48, - "data": "\u001b[2m │ \u001b[38;2;166;227;161;22mimport re, yaml\r\n\u001b[39;2m │ … +65 lines\r\n └ Traceback (most recent call last):\r\n\u001b[0m \u001b[2m File \"\", line 31, in \r\n\u001b[0m \u001b[2m File \"\", line 31, in \r\n\u001b[0m \u001b[2mAttributeError: 'tuple' object has no\r\n\u001b[0m \u001b[2mattribute 'name'\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mВ скрипте анализа была ошибка в проверке\r\n кортежа, поправляю и повторяю.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpython\u001b[38;2;205;214;244m - \u001b[38;2;148;226;213m<<\u001b[38;2;166;227;161m'\u001b[38;2;203;166;247mPY\u001b[38;2;166;227;161m'\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mfrom pathlib import Path\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mimport re, yaml\r\n\u001b[39;2m │ … +66 lines\r\n └\r\n\u001b[0m \u001b[2mCONFLICT 00 Inbox/Краткая теория с важными\r\n … +107 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mwanted: Налогообложение в России\r\n\u001b[0m \u001b[2m -> no title/alias match\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mПо совпадениям: 84 из 110 «без оригинала» уже\r\n имеют нормальные версии в архиве/новых папках,\r\n но содержимое отличается метаданными/ссылками.\r\n Для 26 совпадения нет, проверяю их как\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 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'Linux - MOC\\|Kubernetes -\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mMOC\\|VLAN\\|Router-on-a-Stick\\|База\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mинвестора\\|Налогообложение в России\\|\r\n\u001b[39;2m │ … +4 lines\r\n └ 20 matches in 1F:\r\n\r\n … +27 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m| VLAN - Полная Настройка Cisco | stable ...\r\n\r\n\r\n\u001b[32;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'Linux\\|Kubernetes\\|VLAN\\|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mRouter-on-a-Stick\\|База инвестора\\|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mНалогообложение в России\\|Теория\r\n\u001b[39;2m │ … +5 lines\r\n └ 81 matches in 1F:\r\n\r\n … +35 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +56\r\n\r\n\u001b[31;22m•\u001b[0m PreToolUse hook (failed)\r\n error: PreToolUse hook returned updatedInput\r\n without permissionDecision:allow\r\n\r\n\u001b[31;1m•\u001b[0m PreToolUse hook (failed)\r\n error: PreToolUse hook returned updatedInput\r\n without permissionDecision:allow\r\n\r\n\u001b[31;1m•\u001b[0m PreToolUse hook (failed)\r\n error: PreToolUse hook returned updatedInput\r\n without permissionDecision:allow\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mdiff\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mu\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/Archive/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mSocialBase/02 Друзья/Михаил Никитин.md'\r\n\r\n\u001b[31;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mdiff\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mu\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/Programming/Ruby/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mRuby - массивы.md'\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/Ruby -\r\n\u001b[39;2m │ … +2 lines\r\n └ --- \"90 Library/Programming/Ruby/Ruby -\r\n\u001b[0m \u001b[2mмассивы.md\" 2026-06-03 14:03:15.701270400\r\n … +32 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m ## Создание массива\r\n\r\n\r\n\u001b[31;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mdiff\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mu\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/Linux/Linux -\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mMOC.md'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/Linux/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLinux.sync-conflict-20260603-110335-23DMR5\r\n\u001b[39;2m │ … +1 lines\r\n └ --- \"90 Library/Linux/Linux - MOC.md\"\r\n\u001b[0m \u001b[2m2026-06-03 14:03:27.356398900 +0300\r\n … +24 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m %% Begin Waypoint %%\r\n\u001b[0m \u001b[2m - [[Command Help]]\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Антихрупкость.sync-conflict-20260603-\r\n\u001b[32;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'Основы сетевых\\|Курс по\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mDevOps\\|Data Science с нуля\\|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mАнтихрупкость\\|Психология денег'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99\r\n\u001b[39;2m │ … +1 lines\r\n └ 1 matches in 1F:\r\n\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mуправляема...\r\n\r\n\r\n\u001b[32;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/Archive/04 Tools/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mStudyTracker/Books'\r\n\u001b[39;2m └ Books.md 1.4K\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл особый случай: индивидуальные\r\n \u001b[36mStudyTracker\u001b[0m-книги/курсы есть только как\r\n conflict-файлы, в архиве есть только MOC-\r\n страницы. Их удаление может потерять заметки с\r\n цитатами и прогрессом, поэтому вынесу это\r\n отдельным пунктом плана.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m 03 Journal.sync-conflict-20260603-\r\n\u001b[2m \u001b[0m110335-\r\n 23DMR5O.md\u001b[2m, \u001b[0mCourses.md\u001b[2m, \u001b[0mBooks.md\r\n\r\n\u001b[2m• \u001b[0mUpdated Plan\r\n\u001b[2m └ \u001b[0m✔ \u001b[2;9mНайти sync-conflict файлы\r\n\u001b[0m ✔ \u001b[2;9mСопоставить с оригиналами и diff\r\n\u001b[0m □ \u001b[36;1mПредложить план разрешения\r\n\u001b[0m □ \u001b[2mПосле подтверждения внести правки и\r\n\u001b[0m \u001b[2mобновить INDEX\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл \u001b[36m140\u001b[0m конфликтов.\r\n\r\n План разрешения:\r\n\r\n \u001b[94m1. \u001b[36mkeep-original\u001b[0m для \u001b[36m30\u001b[0m файлов, где оригинал\r\n существует.\r\n Конфликтные версии старее: старый \u001b[36mINDEX.md\r\n\u001b[0m вместо \u001b[36m99 System/INDEX.md\u001b[0m, старые\r\n wikilinks, старый frontmatter.\r\n\r\n \u001b[94m2. \u001b[0mУдалить конфликтные дубликаты старых путей\r\n для \u001b[36m97\u001b[0m файлов.\r\n Это в основном старые \u001b[36m04 Tools/...\u001b[0m, старые\r\n MOC без \u001b[36m- MOC\u001b[0m, старые \u001b[36mRuby - массивы\u001b[0m вне\r\n подпапки. Актуальные версии уже есть в \u001b[36m99\r\n\u001b[0m - \u001b[36m00 Inbox/Краткая теория с важными\r\n\u001b[0m \u001b[36mформулами по нечетким выводам.md\r\n\r\n\u001b[0m - \u001b[36m04 Tools/StudyTracker/Books/*.md\u001b[0m — 8\r\n\r\n \u001b[94m5. \u001b[0mОбновить \u001b[36m99 System/INDEX.md\u001b[0m.\r\n\r\n Подтверди: делать по этому плану?\r\n\r\n\u001b[2m─ Worked for 3m 36s ────────────────────────────\r\n\r\n\u001b[48;5;237;22m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mдавай\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[31m■ Conversation interrupted - tell the model what\r\nto do differently. Something went wrong? Hit `/\r\nfeedback` to report the issue.\r\n\u001b[0mToken usage: total=78 141 input=68 979 (+ 1 043 840 cached) output=9 162 (reasoning 2 465)\r\n\u001b[38;5;76m❯\u001b[0m \u001b[32mcodex\r\n\u001b[0m󰖟 Proxy enabled (127.0.0.1:2080)\r\nWARNING: failed to clean up stale arg0 temp dirs: Permission denied (os error 13)\r\n\u001b[2m╭───────────────────────────────────────────────\r\n──╮\r\n│ \u001b[36;22m✨ Update available!\u001b[0m \u001b[1m0.135.0 -> 0.136.0\r\n\u001b[22;2m│\r\n│ \u001b[0mSee \u001b[36;4mhttps://github.com/openai/codex\u001b[0m for\r\n\u001b[2m│\r\n│ \u001b[0minstallation options.\r\n\u001b[2m│\r\n│\r\n│\r\n│ \u001b[0mSee full release notes:\r\n\u001b[2m│\r\n│ \u001b[36;4;22mhttps://github.com/openai/codex/releases/latest\u001b[39;24;2m │\r\n╰───────────────────────────────────────────────\r\n──╯\r\n\r\n╭────────────────────────────────────────────╮\r\n│ >_ \u001b[0mOpenAI Codex\u001b[2m (v0.135.0) │\r\n│ │\r\n│ model: \u001b[0mgpt-5.5 high\u001b[2m \u001b[36;22m/model\u001b[39;2m to change │\r\n│ directory: \u001b[0m~/Documents/Vaults/SecondBrain\u001b[2m │\r\n╰────────────────────────────────────────────╯\r\n\r\n\u001b[0m \u001b[1mTip:\u001b[0m Press Tab to queue a message when a task\r\n is running; otherwise it sends immediately\r\n (except \u001b[36m!\u001b[0m).\r\n\r\n\u001b[33m⚠ MCP client for `codex_apps` failed to start:\r\n\u001b[0m \u001b[33mMCP startup failed: handshaking with MCP\r\n\u001b[0m \u001b[33mserver failed: Send message error Transport\r\n\u001b[0m \u001b[33m[rmcp::transport::worker::WorkerTransport>]\r\n\u001b[0m \u001b[33merror: Client error: HTTP request failed:\r\n\u001b[0m \u001b[33mhttp/request failed: error sending request for\r\n\u001b[0m \u001b[33murl\r\n\u001b[0m \u001b[33m(https://chatgpt.com/backend-api/wham/apps),\r\n\u001b[0m \u001b[33mwhen send initialize request\r\n\r\n⚠ MCP startup incomplete (failed: codex_apps)\r\n\r\n\u001b[39;48;5;237m \u001b[47X\r\n\u001b[1m›\u001b[22m \u001b[2mFind and fix a bug in @filename\r\n\u001b[0m * Restored history at Thu Jun 04 2026 08:56:43 GMT+0300 (Москва, стандартное время)\u001b[38;2;171;223;167mSecondBrain\r\n\r\n\u001b[38;5;76m❯\u001b[0m \u001b[32mcodex\r\n\u001b[0m󰖟 Proxy enabled (127.0.0.1:2080)\r\nWARNING: failed to clean up stale arg0 temp dirs: Permission denied (os error 13)\r\n\u001b[2m│ \u001b[36;4;22mhttps://github.com/openai/codex/releases/latest\u001b[39;24;2m │\r\n╰───────────────────────────────────────────────\r\n──╯\r\n│ >_ \u001b[1;22mOpenAI Codex\u001b[22;2m (v0.135.0) │\r\n│ │\r\n\u001b[48;5;238;22m тесте) и ссылку на заметку с подробным\u001b[8X\r\n раскрытием темы\r\n Притом, цель - сделать html/pdf файл с\r\n оглавлением по темам, оглавление переносит на\r\n самом низу), и в ней есть ссылка обратно на\r\n коротку заметку\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[31m■ Conversation interrupted - tell the model what\r\nto do differently. Something went wrong? Hit `/\r\nfeedback` to report the issue.\r\n\r\n\u001b[39;48;5;238m\u001b[48X\r\n каждой теме сделать краткий конспект (прям\r\n самое важное для темы, что могут спросить в\r\n тесте) и ссылку на заметку с подробным\r\n раскрытием темы\r\n Притом, цель - сделать html/pdf файл с\r\n оглавлением по темам, оглавление переносит на\r\n блок с краткой информацией, а в нем ссылка на\r\n подробную заметку (подробные заметки идут в\r\n самом низу), и в ней есть ссылка обратно на\r\n коротку заметку. Делаем файлик для подготовки\r\n к эзамену (информация по блоку 2 и дальше уже\r\n есть, блок 1 как раз новая лекция вот эта)\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mСначала прочитаю индекс, файл подготовки и\r\n извлеку текст из PDF, чтобы план был\r\n конкретным. Правки пока не вношу: это массовый\r\n ingest/workflow, после плана дождусь\r\n подтверждения.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpwd\r\n\u001b[39;2m └ /home/ada/Documents/Vaults/SecondBrain\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Подготовка к экзамену по Веб-\r\n\u001b[2m \u001b[0mРазработке.md\u001b[2m,\r\n\u001b[0m INDEX.md\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 ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox\"\r\n\u001b[39;2m └ 00_базовые_понятия.pdf 967.5K\r\n\u001b[0m \u001b[2mПодготовка к экзамену по Веб-Разработке.md\r\n\u001b[0m \u001b[2m7.5K\r\n\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mФайл подготовки содержит 12 блоков; блок 1\r\n закрывается новой PDF-лекцией, блоки 2+ уже\r\n есть как темы экзамена. Сейчас извлеку текст\r\n PDF и найду существующие заметки по HTML/CSS/\r\n Django, чтобы понять, что создавать, а что\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 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\"HTML|CSS|Django|HTTP|IPv4|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mIPv6|DNS|OAuth|Flex|Grid|QuerySet|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mModelForm|URL|URI\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"99 System/INDEX.md\"\r\n\u001b[39;2m └ 9 matches in 5F:\r\n\r\n … +23 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mформы)]] | Основы HTML (структура, табли...\r\n\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpdfinfo\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00 Inbox/00_базовые_понятия.pdf\"\r\n\u001b[39;2m └ Title: Презентация PowerPoint\r\n\u001b[0m \u001b[2mAuthor: Natalie Lukianova\r\n … +17 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mOptimized: no\r\n\u001b[0m \u001b[2mPDF version: 1.7\r\n\r\n └ Базовые механизмы взаимодействия в\r\n\u001b[0m \u001b[2m веб-среде\r\n … +893 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m42\r\n\u001b[0m \r\n\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mPDF — 42 слайда про базовые механизмы веб-\r\n среды: WWW, HTTP, запрос/ответ, HTTPS, HTTP/3,\r\n IP/DNS/NAT/localhost, порты, URI/URL/URN,\r\n auth/OAuth. Теперь проверю шаблон и\r\n существующие заметки, чтобы не плодить дубли.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Base Note.md\u001b[2m, \u001b[0mОсновы, селекторы и\r\n\u001b[2m \u001b[0mблочная\r\n модель.md\u001b[2m, \u001b[0mМодели и ORM.md\u001b[2m, \u001b[0mЭкзамен\r\n - Веб-\r\n ориентированные системы.md\u001b[2m, \u001b[0mОсновы HTML\r\n (структура, таблицы, формы).md\u001b[2m,\r\n\u001b[0m Представления, шаблоны и CBV.md\u001b[2m, \u001b[0mРабота\r\n с\r\n формами и CUD.md\u001b[2m, \u001b[0mАдаптивность, Flexbox\r\n и\r\n Grid.md\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mПлан перед массовыми правками:\r\n\r\n \u001b[94m1. \u001b[0mИзвлечь PDF \u001b[36m00_базовые_понятия.pdf\u001b[0m и\r\n оформить блок 1 в подробные материалы по\r\n темам: IP/IPv4/IPv6, TCP, подсети/NAT/\r\n localhost, DNS, HTTP/HTTPS/HTTP/3, порты,\r\n URI/URL/URN, идентификация/аутентификация/\r\n авторизация, OAuth 2.0.\r\n\r\n \u001b[94m2. \u001b[0mИспользовать существующие заметки как\r\n \u001b[36mАдаптивность, Flexbox и Grid\u001b[0m, \u001b[36mDjango:\r\n\u001b[0m \u001b[36mМодели и ORM\u001b[0m, \u001b[36mDjango: Представления,\r\n\u001b[0m \u001b[36mшаблоны и CBV\u001b[0m, \u001b[36mDjango: Формы и CUD\u001b[0m.\r\n\r\n \u001b[94m3. \u001b[0mСоздать один файл подготовки в \u001b[36m90 Library/\r\n\u001b[0m якорями внутри HTML: кратко → подробно,\r\n подробно → обратно.\r\n\r\n \u001b[94m4. \u001b[0mСгенерировать PDF из HTML, если в системе\r\n есть рабочий HTML→PDF инструмент; если нет\r\n — оставлю HTML и явно скажу, чем PDF не\r\n собрался.\r\n\r\n \u001b[94m5. \u001b[0mОбновить \u001b[36m99 System/INDEX.md\u001b[0m.\r\n \u001b[94m6. \u001b[0mАрхивировать исходники из Inbox в \u001b[36m99\r\n\u001b[0m \u001b[36mSystem/Archive/\u001b[0m после обработки.\r\n\r\n Подтверди, и я внесу правки.\r\n\r\n\u001b[2m─ Worked for 1m 07s ────────────────────────────\r\n\r\n\u001b[48;5;238;22m\u001b[48X\r\n\u001b[1;2m› \u001b[22;22mНу давай, да\r\n\r\n\u001b[0m\u001b[48X\r\n\u001b[2m• \u001b[0mПриступаю к правкам. Сначала сохраню\r\n извлечённый текст PDF во временный файл и\r\n проверю структуру лекции, затем создам/дополню\r\n заметки и соберу HTML.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m IP-адрес.md\u001b[2m, \u001b[0mDNS.md\u001b[2m, \u001b[0mTCP vs UDP.md\r\n\u001b[2m │ \u001b[38;2;166;227;161;22mСетевые порты|URI|URL|URN|Идентификация|\r\n\u001b[39;2m │ … +2 lines\r\n └ rg: /tmp/web_base_lecture.txt: IO error for\r\n\u001b[0m \u001b[2moperation on /tmp/web_base_lecture.txt: No\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mСетевые порты|URI|URL|URN|Идентификация|\r\n\u001b[0m \u001b[2mOAuth|Маска|Подсети|Адресация)'\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpdftotext\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mlayout\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mInbox/00_базовые_понятия.pdf\"\u001b[38;2;205;214;244m /tmp/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mweb_base_lecture.txt\r\n\u001b[39;2m └ (no output)\r\n\r\n\u001b[0m раньше, чем появился временный текст PDF.\r\n Повторяю извлечение последовательно и дальше\r\n буду опираться на готовый файл.\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mpdftotext\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mlayout\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"00\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mInbox/00_базовые_понятия.pdf\"\u001b[38;2;205;214;244m /tmp/\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22mweb_base_lecture.txt\r\n\u001b[39;2m └ (no output)\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 ls\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mla\u001b[38;2;205;214;244m /tmp/web_base_lecture.txt\r\n\u001b[39;2m └ /tmp/web_base_lecture.txt 74.5K\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\"^ *(Протокол|HTTP|HTTPS|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mHTTP/3|IP|IPv4|IPv6|NAT|DNS|Localhost|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mСетевые порты|URI|URL|URN|Идентификация|\r\n\u001b[39;2m │ … +2 lines\r\n └ 29 matches in 6F:\r\n\r\n … +41 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2m 0:\r\n\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m web_base_lecture.txt\r\n\r\n\u001b[2m────────────────────────────────────────────────\r\n\u001b[0m уже была в vault, но HTTP/HTTPS/HTTP3, URI/\r\n URL/URN, порты, NAT и OAuth лучше добавить\r\n отдельными заметками, чтобы у подготовки были\r\n точные подробные цели.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m web_base_lecture.txt\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 find \u001b[38;2;166;227;161m\"90 Library/Networking\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mmaxdepth\r\n\u001b[39;2m │ \u001b[38;2;205;214;244;22m3\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mtype\u001b[38;2;205;214;244m f\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*NAT*\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*HTTP*\"\r\n\u001b[39;2m │ \u001b[38;2;147;153;178;22m-\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*URI*\"\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mo\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mname\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"*OAuth*\"\r\n\u001b[39;2m └ rtk: rtk find does not support compound\r\n\u001b[0m \u001b[2mpredicates or actions (e.g. -not, -exec).\r\n\u001b[0m \u001b[2mUse `find` directly.\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\"NAT|HTTP|HTTPS|HTTP/3|OAuth|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mURI|URL|URN|Сетевые порты|Порты|localhost|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLocalhost|Аутентификация|Авторизация|\r\n\u001b[39;2m │ … +2 lines\r\n └ 71 matches in 21F:\r\n\r\n … +113 lines (ctrl + t to view transcript)\r\n\r\n\u001b[0m \u001b[2m... +2\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m IPv6.md\u001b[2m, \u001b[0mNAT.md\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\r\n────────────────────────────────────────────────\r\n\r\n• \u001b[0mСоздаю новые подробные заметки только для тем\r\n блока 1, которых не хватало как отдельных\r\n точек входа. Для уже существующих HTML/CSS/\r\n Django/сетевых заметок буду ссылаться на них,\r\n без попутного переписывания.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 6 files (\u001b[32m+409\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[2m └ \u001b[0m90 Library/Networking/OAuth 2.0.md (\u001b[32m+47\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[37X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: OAuth 2.0\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [web, security, oauth, authorizati\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mon]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m10 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m OAuth 2\r\n\u001b[39m \u001b[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m OAuth 2.0\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\u001b[38;2;205;214;244m# OAuth 2.0\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\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вателя этому приложению.\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mГде встречается\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\r\n\u001b[39m \u001b[2m19 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m вход на сайт через Google, GitHub, VK\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mили другую внешнюю учётную запись;\r\n\u001b[39m \u001b[2m20 \u001b[32;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[2m21 \u001b[32;22m+\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;22mPI сервиса.\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mГлавная идея\r\n\u001b[39m \u001b[2m24 \u001b[32;22m+\r\n\u001b[39m \u001b[2m25 \u001b[32;22m+\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его для запросов к API.\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\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е.\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mУчастники\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Resource Owner — владелец ресурса, обы\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчно пользователь.\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Client — приложение, которому нужен до\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mступ.\r\n\u001b[39m \u001b[2m33 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Authorization Server — сервер, который\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m выдаёт токены.\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Resource Server — API, который принима\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет токен и отдаёт защищённые данные.\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\r\n\u001b[39m \u001b[2m36 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mТокены\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Access token — используется для доступ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа к API.\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Refresh token — используется для получ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mения нового access token без повторного\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвхода пользователя.\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Scope — набор разрешений, ограничивающ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mий действия клиента.\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\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входа поверх OAuth обычно используют Ope\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mnID Connect.\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\r\n\u001b[39m \u001b[2m44 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m45 \u001b[32;22m+\r\n\u001b[39m \u001b[2m46 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[Веб-аутентификация и авторизация]]\r\n\u001b[39m \u001b[2m47 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[HTTP, HTTPS и HTTP3]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m └ \u001b[0m90 Library/Networking/Веб-аутентификация и\r\n\u001b[2m \u001b[0mавторизация.md (\u001b[32m+44\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[37X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: Веб-аутентификация и авторизация\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [web, security, authentication, au\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mthorization, oauth]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m10 \u001b[32;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[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Веб-аутентификация\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\u001b[38;2;205;214;244m# Веб-аутентификация и авторизация\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\u001b[38;2;205;214;244mИдентификация, аутентификация и авториза\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mция — разные этапы контроля доступа.\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mТермины\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\r\n\u001b[39m \u001b[2m19 \u001b[32;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 кто он: логин, email, номер телефона, I\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mD.\r\n\u001b[39m \u001b[2m20 \u001b[32;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о себя выдаёт: пароль, одноразовый код,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mключ, сертификат.\r\n\u001b[39m \u001b[2m21 \u001b[32;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ено делать.\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\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[2m24 \u001b[32;22m+\r\n\u001b[39m \u001b[2m25 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTP-аутентификация\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\u001b[38;2;205;214;244mРаспространённые схемы:\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mBasic\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к base64-строка. Base64 не является шифр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mованием, поэтому Basic нельзя использова\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mть без HTTPS для чувствительных данных.\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDigest\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ически безопаснее Basic, но сейчас испол\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mьзуется реже.\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mBearer\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;244mAuthorization\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\r\n\u001b[39m \u001b[2m33 \u001b[32;22m+\u001b[38;2;205;214;244mПример Bearer:\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhttp\r\n\u001b[39m \u001b[2m36 \u001b[32;22m+\u001b[38;2;205;214;244mAuthorization: Bearer eyJhbGciOi...\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;205;214;244mBearer-токен даёт доступ тому, кто им вл\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[2m40 \u001b[32;22m+\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[OAuth 2.0]]\r\n\u001b[39m \u001b[2m44 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[HTTP, HTTPS и HTTP3]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m └ \u001b[0m90 Library/Networking/Подсети и маска\r\n\u001b[2m \u001b[0mподсети.md (\u001b[32m+66\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[37X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: Подсети и маска подсети\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [network, networking, subnet, ipv4\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m10 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Маска подсети\r\n\u001b[39m \u001b[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Подсети\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\u001b[38;2;205;214;244m# Подсети и маска подсети\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\u001b[38;2;205;214;244mМаска подсети показывает, какая часть IP\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mv4-адреса относится к сети, а какая — к\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mхосту внутри этой сети.\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mГлавное\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\r\n\u001b[39m \u001b[2m19 \u001b[32;22m+\u001b[38;2;205;214;244mIPv4-адрес состоит из 32 бит. Без маски\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[2m20 \u001b[32;22m+\r\n\u001b[39m \u001b[2m21 \u001b[32;22m+\u001b[38;2;205;214;244mПример:\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m24 \u001b[32;22m+\u001b[38;2;205;214;244mIP: 192.168.123.132\r\n\u001b[39m \u001b[2m25 \u001b[32;22m+\u001b[38;2;205;214;244mМаска: 255.255.255.0\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\u001b[38;2;205;214;244mCIDR: /24\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m/24\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m означает, что первые 24 бита — сет\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mь, оставшиеся 8 бит — хосты.\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\u001b[38;2;205;214;244mДля примера выше:\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\r\n\u001b[39m \u001b[2m33 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m адрес сети: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m192.168.123.0\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m;\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m часть хоста: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m0.0.0.132\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m;\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m маска: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m255.255.255.0\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m36 \u001b[32;22m+\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mCIDR\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;205;214;244mCIDR-запись \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m/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диниц в маске.\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m CIDR \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|\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\u001b[38;2;147;153;178m|------|-------|----------------|\r\n\u001b[39m \u001b[2m43 \u001b[32;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/32\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;244m255.255.255.255\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|\r\n\u001b[39m \u001b[2m44 \u001b[32;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/24\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;244m255.255.255.0\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m 256 адресов\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mв подсети \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m45 \u001b[32;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/16\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;244m255.255.0.0\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|\r\n\u001b[39m \u001b[2m46 \u001b[32;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/8\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;244m255.0.0.0\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;147;153;178m|\r\n\u001b[39m \u001b[2m47 \u001b[32;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/0\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;244m0.0.0.0\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m весь IPv4-интернет,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m маршрут по умолчанию \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m48 \u001b[32;22m+\r\n\u001b[39m \u001b[2m49 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mПриватные IPv4-диапазоны\r\n\u001b[39m \u001b[2m50 \u001b[32;22m+\r\n\u001b[39m \u001b[2m51 \u001b[32;22m+\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ся вместе с NAT:\r\n\u001b[39m \u001b[2m52 \u001b[32;22m+\r\n\u001b[39m \u001b[2m53 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m10.0.0.0/8\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m;\r\n\u001b[39m \u001b[2m54 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m172.16.0.0/12\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m;\r\n\u001b[39m \u001b[2m55 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m192.168.0.0/16\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m56 \u001b[32;22m+\r\n\u001b[39m \u001b[2m57 \u001b[32;22m+\u001b[38;2;205;214;244mLoopback-диапазон:\r\n\u001b[39m \u001b[2m58 \u001b[32;22m+\r\n\u001b[39m \u001b[2m59 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m127.0.0.0/8\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, чаще всего \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m127.0.0.1\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;244mlocalhost\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m60 \u001b[32;22m+\r\n\u001b[39m \u001b[2m61 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m62 \u001b[32;22m+\r\n\u001b[39m \u001b[2m63 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[IP-адрес]]\r\n\u001b[39m \u001b[2m64 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[IPv6]]\r\n\u001b[39m \u001b[2m65 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[NAT]]\r\n\u001b[39m \u001b[2m66 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[Сетевые порты]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m └ \u001b[0m90 Library/Networking/Протоколы/HTTP, HTTPS\r\n\u001b[2m \u001b[0mи HTTP3.md (\u001b[32m+123\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[36X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: HTTP, HTTPS и HTTP/3\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [web, network, networking, protoc\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mols, http, https, http3]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m 10 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTP, HTTPS и HTTP/3\r\n\u001b[39m \u001b[2m 11 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m 12 \u001b[32;22m+\u001b[38;2;205;214;244m# HTTP, HTTPS и HTTP/3\r\n\u001b[39m \u001b[2m 13 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 14 \u001b[32;22m+\u001b[38;2;205;214;244mHTTP (HyperText Transfer Protocol) — пр\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м WWW. Клиент и сервер обмениваются отд\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;22mHTTP-запрос, сервер возвращает HTTP-отв\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет.\r\n\u001b[39m \u001b[2m 15 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 16 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mГлавное\r\n\u001b[39m \u001b[2m 17 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 18 \u001b[32;22m+\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между запросами. Сессии поверх HTTP обы\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчно поддерживаются через cookies или то\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mкены.\r\n\u001b[39m \u001b[2m 19 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTP/1.0 часто открывал новое TCP-сое\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 20 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTP/1.1 добавил постоянные соединени\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mя и конвейерную обработку.\r\n\u001b[39m \u001b[2m 21 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTP/2 использует бинарные фреймы, сж\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ескольких потоков в одном TCP-соединени\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи.\r\n\u001b[39m \u001b[2m 22 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTPS — это HTTP поверх TLS. Он защищ\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 23 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m HTTP/3 переносит семантику HTTP на QU\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mIC поверх UDP и уменьшает проблему head\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m-of-line blocking.\r\n\u001b[39m \u001b[2m 24 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 25 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTP-запрос\r\n\u001b[39m \u001b[2m 26 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 27 \u001b[32;22m+\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 28 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 29 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhttp\r\n\u001b[39m \u001b[2m 30 \u001b[32;22m+\u001b[38;2;205;214;244mGET /index.html HTTP/1.1\r\n\u001b[39m \u001b[2m 31 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m 32 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 33 \u001b[32;22m+\u001b[38;2;205;214;244mОсновные методы:\r\n\u001b[39m \u001b[2m 34 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 35 \u001b[32;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|\r\n\u001b[39m \u001b[2m 36 \u001b[32;22m+\u001b[38;2;147;153;178m|-------|------------|\r\n\u001b[39m \u001b[2m 37 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mGET\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сто передаются в query string. \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m 38 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPOST\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форма, JSON, файл. \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m 39 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mHEAD\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;147;153;178m`\u001b[38;2;205;214;244mGET\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, без тела ответа. \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m 40 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPUT\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;147;153;178m|\r\n\u001b[39m \u001b[2m 41 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPATCH\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|\r\n\u001b[39m \u001b[2m 42 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDELETE\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|\r\n\u001b[39m \u001b[2m 43 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mOPTIONS\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;147;153;178m|\r\n\u001b[39m \u001b[2m 44 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 45 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTP-сообщение\r\n\u001b[39m \u001b[2m 46 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 47 \u001b[32;22m+\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 48 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 49 \u001b[32;22m+\u001b[38;2;205;214;244m1\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m Стартовая строка.\r\n\u001b[39m \u001b[2m 50 \u001b[32;22m+\u001b[38;2;205;214;244m2\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m Заголовки.\r\n\u001b[39m \u001b[2m 51 \u001b[32;22m+\u001b[38;2;205;214;244m3\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m Пустая строка.\r\n\u001b[39m \u001b[2m 52 \u001b[32;22m+\u001b[38;2;205;214;244m4\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m Необязательное тело.\r\n\u001b[39m \u001b[2m 53 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 54 \u001b[32;22m+\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. Имя не чувствительно к р\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mегистру.\r\n\u001b[39m \u001b[2m 55 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 56 \u001b[32;22m+\u001b[38;2;205;214;244mЧастые заголовки запроса:\r\n\u001b[39m \u001b[2m 57 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 58 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mHost\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — конкретный домен или IP, к к\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоторому обращается клиент.\r\n\u001b[39m \u001b[2m 59 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mUser-Agent\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 60 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAccept\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 61 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mCookie\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — cookies клиента.\r\n\u001b[39m \u001b[2m 62 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAuthorization\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ии, например Bearer-токен.\r\n\u001b[39m \u001b[2m 63 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 64 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTP-ответ\r\n\u001b[39m \u001b[2m 65 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 66 \u001b[32;22m+\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 67 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 68 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhttp\r\n\u001b[39m \u001b[2m 69 \u001b[32;22m+\u001b[38;2;205;214;244mHTTP/1.1 200 OK\r\n\u001b[39m \u001b[2m 70 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m 71 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 72 \u001b[32;22m+\u001b[38;2;205;214;244mКлассы кодов:\r\n\u001b[39m \u001b[2m 73 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 74 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m1xx\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — информационные.\r\n\u001b[39m \u001b[2m 75 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m2xx\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — успешная обработка.\r\n\u001b[39m \u001b[2m 76 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m3xx\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — перенаправление.\r\n\u001b[39m \u001b[2m 77 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m4xx\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — ошибка клиента.\r\n\u001b[39m \u001b[2m 78 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m5xx\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — ошибка сервера.\r\n\u001b[39m \u001b[2m 79 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 80 \u001b[32;22m+\u001b[38;2;205;214;244mЧастые коды:\r\n\u001b[39m \u001b[2m 81 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 82 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m200 OK\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — запрос успешно обработан.\r\n\u001b[39m \u001b[2m 83 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m302 Found\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 84 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m400 Bad 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ос.\r\n\u001b[39m \u001b[2m 85 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m403 Forbidden\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — доступ запрещён.\r\n\u001b[39m \u001b[2m 86 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m404 Not Found\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — ресурс не найден.\r\n\u001b[39m \u001b[2m 87 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m500 Internal Server Error\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 88 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 89 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTPS\r\n\u001b[39m \u001b[2m 90 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 91 \u001b[32;22m+\u001b[38;2;205;214;244mHTTPS использует TLS поверх 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;244m443\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 — \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m80\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m 92 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 93 \u001b[32;22m+\u001b[38;2;205;214;244mБазовый смысл TLS:\r\n\u001b[39m \u001b[2m 94 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 95 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m сервер предъявляет сертификат;\r\n\u001b[39m \u001b[2m 96 \u001b[32;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 97 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m стороны согласуют ключи;\r\n\u001b[39m \u001b[2m 98 \u001b[32;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 99 \u001b[32;22m+\r\n\u001b[39m \u001b[2m100 \u001b[32;22m+\u001b[38;2;205;214;244mSSL — устаревшее название семейства про\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ски используется TLS, но термин \"SSL-се\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mртификат\" всё ещё распространён.\r\n\u001b[39m \u001b[2m101 \u001b[32;22m+\r\n\u001b[39m \u001b[2m102 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mHTTP/3\r\n\u001b[39m \u001b[2m103 \u001b[32;22m+\r\n\u001b[39m \u001b[2m104 \u001b[32;22m+\u001b[38;2;205;214;244mHTTP/3 работает поверх QUIC, а 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ную доставку, шифрование TLS 1.3 и упра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвление потоками.\r\n\u001b[39m \u001b[2m105 \u001b[32;22m+\r\n\u001b[39m \u001b[2m106 \u001b[32;22m+\u001b[38;2;205;214;244mКлючевые отличия:\r\n\u001b[39m \u001b[2m107 \u001b[32;22m+\r\n\u001b[39m \u001b[2m108 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m HTTP/2 \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m HTTP/3 \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m109 \u001b[32;22m+\u001b[38;2;147;153;178m|--------|--------|\r\n\u001b[39m \u001b[2m110 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Поверх TCP \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Поверх UDP/QUIC \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m111 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m TLS-хендшейк отдельно \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m TLS 1.3 встро\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mен в QUIC \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m112 \u001b[32;22m+\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 Потеря пакета влияет только\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m на конкретный поток \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m113 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Соединение привязано к IP/порту \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m QUI\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mC поддерживает connection migration чер\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mез connection ID \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m114 \u001b[32;22m+\r\n\u001b[39m \u001b[2m115 \u001b[32;22m+\u001b[38;2;205;214;244mHTTP/3 не меняет смысл методов, заголов\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[2m116 \u001b[32;22m+\r\n\u001b[39m \u001b[2m117 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m118 \u001b[32;22m+\r\n\u001b[39m \u001b[2m119 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[TCP vs UDP]]\r\n\u001b[39m \u001b[2m120 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[IP-адрес]]\r\n\u001b[39m \u001b[2m121 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[DNS]]\r\n\u001b[39m \u001b[2m122 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[URI, URL, URN]]\r\n\u001b[39m \u001b[2m123 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[Сетевые порты]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m └ \u001b[0m90 Library/Networking/Протоколы/URI, URL,\r\n\u001b[2m \u001b[0mURN.md (\u001b[32m+75\u001b[0m \u001b[31m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[37X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: URI, URL, URN\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [web, network, networking, uri, ur\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ml, urn]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m10 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m URI, URL, URN\r\n\u001b[39m \u001b[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\u001b[38;2;205;214;244m# URI, URL, URN\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\u001b[38;2;205;214;244mURI, URL и 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;22mURL указывает, где и как получить ресурс\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m; URN даёт устойчивое имя; URI — общее п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mонятие.\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mURL\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\u001b[38;2;205;214;244mURL (Uniform Resource Locator) — адрес р\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mесурса в сети и способ его получения.\r\n\u001b[39m \u001b[2m19 \u001b[32;22m+\r\n\u001b[39m \u001b[2m20 \u001b[32;22m+\u001b[38;2;205;214;244mСинтаксис:\r\n\u001b[39m \u001b[2m21 \u001b[32;22m+\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\u001b[38;2;205;214;244mсхема://хост:порт/путь?параметры#фрагмен\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт\r\n\u001b[39m \u001b[2m24 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m25 \u001b[32;22m+\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\u001b[38;2;205;214;244mПример:\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\u001b[38;2;205;214;244mhttps://home.mephi.ru/study_groups?level\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=1&organization_id=1&term_id=20\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\u001b[38;2;205;214;244mКомпоненты:\r\n\u001b[39m \u001b[2m33 \u001b[32;22m+\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\u001b[38;2;147;153;178m-\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 или \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mhttps\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m;\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m хост — домен или IP-адрес;\r\n\u001b[39m \u001b[2m36 \u001b[32;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[2m37 \u001b[32;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[2m38 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m query string — параметры после \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[2m39 \u001b[32;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,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mчасто соответствует \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mid\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m HTML-элемента.\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mURN\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\u001b[38;2;205;214;244mURN (Uniform Resource Name) — имя ресурс\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[2m44 \u001b[32;22m+\r\n\u001b[39m \u001b[2m45 \u001b[32;22m+\u001b[38;2;205;214;244mСинтаксис:\r\n\u001b[39m \u001b[2m46 \u001b[32;22m+\r\n\u001b[39m \u001b[2m47 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m48 \u001b[32;22m+\u001b[38;2;205;214;244murn:NID:NSS\r\n\u001b[39m \u001b[2m49 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m50 \u001b[32;22m+\r\n\u001b[39m \u001b[2m51 \u001b[32;22m+\u001b[38;2;205;214;244mПример:\r\n\u001b[39m \u001b[2m52 \u001b[32;22m+\r\n\u001b[39m \u001b[2m53 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m54 \u001b[32;22m+\u001b[38;2;205;214;244murn:uuid:d5aa821e-52bb-4f7e-a782-7662ed5\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22meaf5c\r\n\u001b[39m \u001b[2m55 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m56 \u001b[32;22m+\r\n\u001b[39m \u001b[2m57 \u001b[32;22m+\u001b[38;2;205;214;244mURN полезен, когда ресурс должен сохраня\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ения. Пример: ISBN книги.\r\n\u001b[39m \u001b[2m58 \u001b[32;22m+\r\n\u001b[39m \u001b[2m59 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mURI\r\n\u001b[39m \u001b[2m60 \u001b[32;22m+\r\n\u001b[39m \u001b[2m61 \u001b[32;22m+\u001b[38;2;205;214;244mURI (Uniform Resource Identifier) — общи\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;22mURL, URN или совмещать оба подхода.\r\n\u001b[39m \u001b[2m62 \u001b[32;22m+\r\n\u001b[39m \u001b[2m63 \u001b[32;22m+\u001b[38;2;205;214;244mСинтаксис:\r\n\u001b[39m \u001b[2m64 \u001b[32;22m+\r\n\u001b[39m \u001b[2m65 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mtext\r\n\u001b[39m \u001b[2m66 \u001b[32;22m+\u001b[38;2;205;214;244mсхема:[//[пользователь:пароль@]хост[:пор\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт]][/]путь[?запрос][#фрагмент]\r\n\u001b[39m \u001b[2m67 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m68 \u001b[32;22m+\r\n\u001b[39m \u001b[2m69 \u001b[32;22m+\u001b[38;2;205;214;244mГлавное правило: все URL являются URI, н\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mо не все URI являются URL.\r\n\u001b[39m \u001b[2m70 \u001b[32;22m+\r\n\u001b[39m \u001b[2m71 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m72 \u001b[32;22m+\r\n\u001b[39m \u001b[2m73 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[HTTP, HTTPS и HTTP3]]\r\n\u001b[39m \u001b[2m74 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[DNS]]\r\n\u001b[39m \u001b[2m75 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[IP-адрес]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m └ \u001b[0m90 Library/Networking/Сетевые порты.md (\u001b[32m+54\r\n\u001b[39;2m \u001b[31;22m-0\u001b[0m)\r\n\u001b[48;5;22m \u001b[2m 1 \u001b[32;22m+\u001b[38;2;147;153;178m---\u001b[37X\r\n\u001b[39m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: Сетевые порты\r\n\u001b[39m \u001b[2m 3 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: seed\r\n\u001b[39m \u001b[2m 4 \u001b[32;22m+\u001b[38;2;205;214;244mtype: concept\r\n\u001b[39m \u001b[2m 5 \u001b[32;22m+\u001b[38;2;205;214;244mtags: [network, networking, ports, tcp,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mudp, web]\r\n\u001b[39m \u001b[2m 6 \u001b[32;22m+\u001b[38;2;205;214;244mcreated: 2026-06-04\r\n\u001b[39m \u001b[2m 7 \u001b[32;22m+\u001b[38;2;205;214;244mupdated: 2026-06-04\r\n\u001b[39m \u001b[2m 8 \u001b[32;22m+\u001b[38;2;205;214;244msource: \"[[00_базовые_понятия.pdf]]\"\r\n\u001b[39m \u001b[2m 9 \u001b[32;22m+\u001b[38;2;205;214;244maliases:\r\n\u001b[39m \u001b[2m10 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Сетевые порты\r\n\u001b[39m \u001b[2m11 \u001b[32;22m+\u001b[38;2;147;153;178m---\r\n\u001b[39m \u001b[2m12 \u001b[32;22m+\u001b[38;2;205;214;244m# Сетевые порты\r\n\u001b[39m \u001b[2m13 \u001b[32;22m+\r\n\u001b[39m \u001b[2m14 \u001b[32;22m+\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са. IP-адрес указывает хост, порт указыв\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает приложение на этом хосте.\r\n\u001b[39m \u001b[2m15 \u001b[32;22m+\r\n\u001b[39m \u001b[2m16 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mГлавное\r\n\u001b[39m \u001b[2m17 \u001b[32;22m+\r\n\u001b[39m \u001b[2m18 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m Порт — число от \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m0\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m до \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m65535\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m19 \u001b[32;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колами, прежде всего TCP и UDP.\r\n\u001b[39m \u001b[2m20 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m TCP-порт и UDP-порт с одинаковым номер\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[2m21 \u001b[32;22m+\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пользует TCP \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m80\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, HTTPS — TCP \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m443\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 часто \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m8080\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m22 \u001b[32;22m+\r\n\u001b[39m \u001b[2m23 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mДиапазоны\r\n\u001b[39m \u001b[2m24 \u001b[32;22m+\r\n\u001b[39m \u001b[2m25 \u001b[32;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|\r\n\u001b[39m \u001b[2m26 \u001b[32;22m+\u001b[38;2;147;153;178m|----------|------------|\r\n\u001b[39m \u001b[2m27 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m0-1023\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Well-known/system ports. В\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mUnix/Linux для привязки к ним обычно нуж\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mны повышенные права. \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m28 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m1024-49151\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Registered ports. Могут\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m быть зарегистрированы за службами. \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m29 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m49152-65535\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Dynamic/private ports.\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|\r\n\u001b[39m \u001b[2m30 \u001b[32;22m+\r\n\u001b[39m \u001b[2m31 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mЧастые порты\r\n\u001b[39m \u001b[2m32 \u001b[32;22m+\r\n\u001b[39m \u001b[2m33 \u001b[32;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|\r\n\u001b[39m \u001b[2m34 \u001b[32;22m+\u001b[38;2;147;153;178m|------|--------|\r\n\u001b[39m \u001b[2m35 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m21\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m FTP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m36 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m22\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m SSH \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m25\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m SMTP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m53\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m DNS \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m80\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m HTTP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m110\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m POP3 \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m41 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m123\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m NTP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m143\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m IMAP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m443\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m HTTPS \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m44 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m993\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m IMAPS \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m45 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m3306\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m MySQL \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m46 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m3389\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m RDP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m47 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m8080\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m альтернативный HTTP \u001b[38;2;147;153;178m|\r\n\u001b[39m \u001b[2m48 \u001b[32;22m+\r\n\u001b[39m \u001b[2m49 \u001b[32;22m+\u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mСвязи\r\n\u001b[39m \u001b[2m50 \u001b[32;22m+\r\n\u001b[39m \u001b[2m51 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[HTTP, HTTPS и HTTP3]]\r\n\u001b[39m \u001b[2m52 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[TCP vs UDP]]\r\n\u001b[39m \u001b[2m53 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[IP-адрес]]\r\n\u001b[39m \u001b[2m54 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m [[NAT]]\r\n\u001b[0m\u001b[48X\r\n\u001b[2m────────────────────────────────────────────────\r\n\r\n• \u001b[0mНовые заметки блока 1 добавлены. Теперь\r\n собираю сам файл подготовки: оглавление ведёт\r\n к коротким карточкам, каждая карточка ведёт к\r\n подробному блоку внизу, а подробный блок\r\n возвращает обратно к соответствующему блоку\r\n кратких тем.\r\n\r\n•\u001b[1C\u001b[2mWorking\u001b[1C(3m 33s • 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", + "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;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;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;205;214;244m\u001b[19X\r\n\u001b[39m \u001b[2m429 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[29X\r\n\u001b[39m \u001b[2m430 \u001b[32;22m+\u001b[38;2;205;214;244m \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[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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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`.\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;205;214;244m\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;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`.\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;205;214;244m\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;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;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;205;214;244m\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;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 в заданную ширину.\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;205;214;244m\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;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`.\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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\r\n\u001b[39m \u001b[2m450 \u001b[32;22m+\u001b[38;2;205;214;244m \r\n\u001b[39m \u001b[2m451 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;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 поперечная идёт перпендикулярно.\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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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\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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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\r\n\u001b[39m \u001b[2m463 \u001b[32;22m+\u001b[38;2;205;214;244m \r\n\u001b[39m \u001b[2m464 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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`.\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;205;214;244m\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;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;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;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;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;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\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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;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;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;205;214;244m\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Переопределение выгрузки\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;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;205;214;244m\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;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;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;205;214;244m\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Шаблоны по умолчанию\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`.\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;205;214;244m\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;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;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\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;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;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;205;214;244m\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;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;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;205;214;244m\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\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;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;205;214;244m\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;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;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;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;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;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\r\n\u001b[39m \u001b[2m495 \u001b[32;22m+\u001b[38;2;205;214;244m \r\n\u001b[39m \u001b[2m496 \u001b[32;22m+\u001b[38;2;205;214;244m \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Подробные заметки\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\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;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;205;214;244m\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 шестнадцатеричных чисел.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m507 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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и служебным трафиком.\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 и порядка.\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;205;214;244m\r\n\u001b[39m \u001b[2m515 \u001b[32;22m+\u001b[38;2;205;214;244m \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Подсети и маска подсети\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Подсети и маска подсети\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\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 — хосты.\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 в подсети.\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;205;214;244m\r\n\u001b[39m \u001b[2m523 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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,\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;205;214;244m\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ю машину.\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 связность.\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;205;214;244m\r\n\u001b[39m \u001b[2m531 \u001b[32;22m+\u001b[38;2;205;214;244m \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-серверы\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;205;214;244m\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 авторитативные серверы домена.\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 записи домена.\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;205;214;244m\r\n\u001b[39m \u001b[2m539 \u001b[32;22m+\u001b[38;2;205;214;244m \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-сообщения\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\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езультат обработки.\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;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;205;214;244m\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;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;205;214;244m\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;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;205;214;244m\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;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mСоздать/заменить ресурс\u001b[38;2;205;214;244m\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;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;205;214;244m\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;205;214;244m<\u001b[38;2;137;180;250mtd\u001b[38;2;147;153;178m>\u001b[38;2;205;214;244mУдалить ресурс\u001b[38;2;205;214;244m\u001b[38;2;205;214;244m\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проблема на стороне сервера.\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;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;205;214;244m\r\n\u001b[39m \u001b[2m548 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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\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 и защиту от подмены трафика.\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 небезопасен.\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;205;214;244m\r\n\u001b[39m \u001b[2m556 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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\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.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m564 \u001b[32;22m+\u001b[38;2;205;214;244m \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Сетевые порты\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;205;214;244m\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зные конечные точки.\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`.\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;205;214;244m\r\n\u001b[39m \u001b[2m572 \u001b[32;22m+\u001b[38;2;205;214;244m \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 авторизация\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;205;214;244m\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.\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оризация.\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;205;214;244m\r\n\u001b[39m \u001b[2m580 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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ми правами и сроком жизни.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m588 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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тификаторов ресурсов.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m596 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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и таблицы.\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 не для макета.\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;205;214;244m\r\n\u001b[39m \u001b[2m604 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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ку.\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`.\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\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\r\n\u001b[39m \u001b[2m612 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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и порядок правил.\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окласс > тег/псевдоэлемент.\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;205;214;244m\r\n\u001b[39m \u001b[2m620 \u001b[32;22m+\u001b[38;2;205;214;244m \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 базовые свойства\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;205;214;244m\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`.\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` включает.\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;205;214;244m\r\n\u001b[39m \u001b[2m628 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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 макета страницы.\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.\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;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 \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\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;205;214;244m\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осят изменения моделей в БД.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m644 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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нкции.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m652 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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()`.\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`.\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;205;214;244m\r\n\u001b[39m \u001b[2m660 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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 по имени маршрута.\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`.\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;205;214;244m\r\n\u001b[39m \u001b[2m668 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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`.\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.\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;205;214;244m\r\n\u001b[39m \u001b[2m676 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;205;214;244m\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ля к объектам.\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росами.\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;205;214;244m\r\n\u001b[39m \u001b[2m684 \u001b[32;22m+\u001b[38;2;205;214;244m \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\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;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_\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м поля.\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защита.\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;205;214;244m\r\n\u001b[39m \u001b[2m692 \u001b[32;22m+\u001b[38;2;205;214;244m \r\n\u001b[39m \u001b[2m693 \u001b[32;22m+\u001b[38;2;205;214;244m \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;205;214;244m\r\n\u001b[39m \u001b[2m696 \u001b[32;22m+\u001b[38;2;205;214;244m\r\n\u001b[39m \u001b[2m697 \u001b[32;22m+\u001b[38;2;205;214;244m\r\n\u001b[39m \u001b[2m698 \u001b[32;22m+\u001b[38;2;205;214;244m\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: Class Meta\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\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\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\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\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;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;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\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;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;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\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;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;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\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<\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;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\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 } @@ -164,7 +164,7 @@ }, "pinned": true, "icon": "terminal", - "title": "Terminal: ⠧ SecondBrain" + "title": "Terminal: ⠋ SecondBrain" } }, { @@ -267,8 +267,16 @@ "3d-graph-new:Global 3D Graph": false } }, - "active": "06940eb960fc1db5", + "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", @@ -283,19 +291,11 @@ "AGENTS.md", "90 Library/Other/Сканер отпечатка пальцев.md", "00 Inbox/Краткая теория с важными формулами по нечетким выводам.sync-conflict-20260603-140755-23DMR5O.md", - "90 Library/Programming/Web/Основы, селекторы и блочная модель.md", - "90 Library/Programming/Web/Адаптивность, Flexbox и Grid.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/SocialBase/04 Другие/Алина Шакурова.sync-conflict-20260603-110335-23DMR5O.md", - "04 Tools/StudyTracker/Books/Books.sync-conflict-20260603-110335-23DMR5O.md", - "90 Library/Finance/Инвестиции/Трейдинг.sync-conflict-20260603-110313-23DMR5O.md", - "90 Library/Machine Learning/Нейронные сети.sync-conflict-20260603-110321-23DMR5O.md", - "04 Tools/SocialBase/02 Друзья/Лика Вольфрам.sync-conflict-20260603-110335-23DMR5O.md", - "04 Tools/SocialBase/04 Другие/Эля Богатова.sync-conflict-20260603-110335-23DMR5O.md", "04 Tools/StudyTracker/Courses", "04 Tools/StudyTracker/Books", "04 Tools/SocialBase/04 Другие", diff --git a/90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.html b/90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.html new file mode 100644 index 0000000..eb3f186 --- /dev/null +++ b/90 Library/Programming/Web/Подготовка к экзамену по веб-разработке.html @@ -0,0 +1,698 @@ + + + + + + Подготовка к экзамену по веб-разработке + + + +
+
+

Подготовка к экзамену по веб-разработке

+

Краткий конспект по темам из файла подготовки. Оглавление ведёт к короткой карточке темы; ссылка в карточке ведёт к подробному блоку внизу; подробный блок возвращает обратно к краткому разделу.

+
+ + + +
+

Блок 1. Общие вопросы

+
+
+

Адресация в Интернете. IPv4. IPv6.

+

В TCP/IP есть физический адрес, IP-адрес и символьное DNS-имя. IPv4 — 32 бита, 4 октета по 0-255; IPv6 — 128 бит, шестнадцатеричная запись и намного больше адресов.

+ Подробно: IP-адресация +
+
+

Протокол TCP

+

TCP — транспортный протокол с установлением соединения, порядком пакетов, подтверждениями и повторной передачей. Надёжнее UDP, но тяжелее по задержкам.

+ Подробно: TCP +
+
+

Маска подсети

+

Маска отделяет сетевую часть IPv4-адреса от хостовой. `/24` значит 24 бита сети и 8 бит хоста; `255.255.255.0` — классический пример такой маски.

+ Подробно: подсети +
+
+

Распределение IP, NAT, localhost, подсети

+

Публичные адреса распределяются через ICANN/IANA и региональные регистраторы. NAT переводит приватные адреса во внешний адрес. `127.0.0.1`/`localhost` указывает на сам хост.

+ Подробно: NAT и localhost +
+
+

DNS. DNS-серверы

+

DNS сопоставляет доменные имена с IP-адресами. Цепочка обычно идёт через кэширующий resolver, корневые серверы, TLD-серверы и авторитативные серверы домена.

+ Подробно: DNS +
+
+

Протокол HTTP

+

HTTP — прикладной протокол WWW. Клиент отправляет запрос, сервер возвращает ответ. HTTP stateless: связь между запросами не хранится без cookies, сессий или токенов.

+ Подробно: HTTP +
+
+

HTTP-запрос, ответ, методы, заголовки, коды

+

Сообщение состоит из стартовой строки, заголовков, пустой строки и тела. Методы: `GET`, `POST`, `HEAD`, `PUT`, `PATCH`, `DELETE`. Коды: `2xx` успех, `3xx` редирект, `4xx` ошибка клиента, `5xx` ошибка сервера.

+ Подробно: HTTP-сообщения +
+
+

Протокол HTTPS

+

HTTPS — HTTP поверх TLS. Даёт шифрование, проверку подлинности сервера через сертификат и защиту от подмены данных. Порт по умолчанию — `443`.

+ Подробно: HTTPS +
+
+

Протокол HTTP/3

+

HTTP/3 работает поверх QUIC/UDP. Семантика HTTP сохраняется, но транспорт меняется: независимые потоки, встроенный TLS 1.3, меньше блокировок при потере пакетов.

+ Подробно: HTTP/3 +
+
+

Сетевые порты. HTTP и HTTPS

+

Порт указывает процесс внутри IP-адреса. Всего 0-65535. HTTP обычно `80/tcp`, HTTPS `443/tcp`, DNS `53`, SSH `22`, альтернативный HTTP часто `8080`.

+ Подробно: порты +
+
+

Идентификация, аутентификация, авторизация

+

Идентификация: "кто ты?". Аутентификация: "докажи". Авторизация: "что тебе разрешено?". В HTTP часто встречаются Basic, Digest и Bearer.

+ Подробно: auth +
+
+

OAuth 2.0

+

OAuth 2.0 — протокол авторизации: приложение получает ограниченный доступ к ресурсам пользователя через токен, не получая пароль пользователя.

+ Подробно: OAuth 2.0 +
+
+

URI, URL, URN

+

URI — общий идентификатор ресурса. URL указывает местоположение и способ получения. URN задаёт устойчивое имя без привязки к расположению. Все URL — URI, но не все URI — URL.

+ Подробно: URI/URL/URN +
+
+
+ +
+

Блок 2. HTML

+
+

Структура документа

HTML5-документ начинается с ``, затем ``, внутри `` с метаданными и `` с видимым содержимым.

Подробно: HTML
+

Комментарии в HTML

Комментарий пишется как ``. Браузер его не отображает, но он виден в исходном коде.

Подробно: HTML
+

Теги внутри head

В `` обычно находятся ``, `<meta>`, `<link>`, `<style>`, `<script>` и технические данные страницы.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-meta"><h3>Мета-теги и viewport</h3><p>`<meta charset="utf-8">` задаёт кодировку. `viewport` нужен адаптивной вёрстке: `width=device-width, initial-scale=1.0`.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-flow"><h3>Нормальный поток</h3><p>Нормальный поток — базовое расположение элементов без flex/grid/position: блочные идут сверху вниз, строчные текут внутри строки.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-block-inline"><h3>Блочные и строчные элементы</h3><p>Блочные занимают доступную ширину и начинаются с новой строки: `div`, `p`, `section`. Строчные занимают место по содержимому: `span`, `a`, `strong`.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-semantic"><h3>Семантические теги</h3><p>`header`, `nav`, `main`, `section`, `article`, `aside`, `footer` описывают смысл блоков. Это важно для доступности, SEO и читаемости кода.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-attrs"><h3>Атрибуты тегов</h3><p>Атрибуты уточняют элемент: `href`, `src`, `alt`, `class`, `id`, `name`, `type`. Обычно пишутся в открывающем теге.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-class"><h3>Атрибут class</h3><p>`class` задаёт один или несколько CSS-классов. Один класс можно использовать на многих элементах.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-id"><h3>Идентификатор элемента</h3><p>`id` должен быть уникален на странице. Используется для якорей, JS и CSS-селектора `#id`.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-text-table"><h3>Заголовки, абзацы, списки, таблицы</h3><p>`h1-h6` задают структуру заголовков, `p` — абзац, `ul/ol/li` — списки, `table/tr/th/td` — табличные данные.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-img-link"><h3>Картинки и ссылки</h3><p>Ссылка: `<a href="...">`. Картинка: `<img src="..." alt="...">`; `alt` важен для доступности и случаев, когда изображение не загрузилось.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + <article class="card" id="s-whitespace"><h3>Переносы строк и пробелы</h3><p>В HTML последовательности пробелов схлопываются. Перенос строки в коде обычно не равен переносу на странице; для явного переноса есть `<br>`.</p><a class="detail-link" href="#d-html">Подробно: HTML</a></article> + </div> + </section> + + <section class="block" id="block-3"> + <h2>Блок 3. HTML Forms</h2> + <div class="cards"> + <article class="card" id="s-form"><h3>Форма и атрибуты</h3><p>`form` собирает пользовательский ввод. Главные атрибуты: `action` — куда отправлять, `method` — `get` или `post`.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-form-id-name"><h3>id и name</h3><p>`id` связывает поле с `label` и должен быть уникальным. `name` — имя параметра, под которым значение уйдёт на сервер.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-inputs"><h3>radio, checkbox, submit</h3><p>`radio` выбирает один вариант в группе с одинаковым `name`. `checkbox` — независимый флажок. `submit` отправляет форму.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-label"><h3>Label</h3><p>`label` подписывает поле и улучшает доступность. Связь делается через `for="field-id"` или вложением input внутрь label.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-fieldset"><h3>Группировка элементов</h3><p>`fieldset` объединяет связанные поля, `legend` задаёт подпись группы. Часто используется для radio-групп.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-required"><h3>required</h3><p>`required` запрещает отправку формы браузером, если поле пустое. Серверную валидацию всё равно нужно делать отдельно.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-placeholder"><h3>Placeholder</h3><p>`placeholder` показывает подсказку внутри пустого поля. Это не замена `label`, потому что исчезает при вводе.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-button-type"><h3>type для button</h3><p>`button` без `type` внутри формы часто ведёт себя как `submit`. Для обычной кнопки явно пишут `type="button"`.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + <article class="card" id="s-textarea"><h3>Textarea</h3><p>`textarea` — многострочное текстовое поле. Текст по умолчанию пишется между открывающим и закрывающим тегом.</p><a class="detail-link" href="#d-html-forms">Подробно: HTML forms</a></article> + </div> + </section> + + <section class="block" id="block-4"> + <h2>Блок 4. CSS selectors и базовые свойства</h2> + <div class="cards"> + <article class="card" id="s-css-universal"><h3>Универсальный селектор</h3><p>`*` выбирает все элементы. Часто применяют для сброса `box-sizing`, но специфичность у него нулевая.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-basic-selectors"><h3>Элемент, класс, идентификатор</h3><p>`p` выбирает теги, `.card` — класс, `#main` — уникальный id. ID специфичнее класса и тега.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-combinators"><h3>Дочерний, потомок, сестринский</h3><p>`A B` — потомок, `A > B` — прямой ребёнок, `A + B` — следующий сосед, `A ~ B` — последующие соседи.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-attr"><h3>Селектор атрибута</h3><p>`[attr]`, `[type="email"]`, `a[href^="https"]` выбирают элементы по наличию или значению атрибута.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-pseudo"><h3>Псевдоклассы</h3><p>`:hover`, `:focus`, `:checked`, `:nth-child()` выбирают состояние или позицию элемента. Структурные псевдоклассы зависят от места в DOM.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-group"><h3>Группировка селекторов</h3><p>Селекторы через запятую получают одно правило: `h1, h2, h3 { margin: 0; }`.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-cascade"><h3>Наследование и каскадирование</h3><p>Каскад решает конфликт правил по важности, специфичности и порядку. Наследуются в основном текстовые свойства, например `color` и `font-family`.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-css-specificity"><h3>Специфичность</h3><p>Условный вес: inline > ID > классы/атрибуты/псевдоклассы > теги/псевдоэлементы. При равенстве побеждает правило ниже в коде.</p><a class="detail-link" href="#d-css-selectors">Подробно: CSS selectors</a></article> + <article class="card" id="s-box-model"><h3>Блочная модель</h3><p>Блок состоит из content, padding, border и margin. `box-sizing: border-box` включает padding и border в заданную ширину.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-background"><h3>Фон элемента</h3><p>Основные свойства: `background-color`, `background-image`, `background-repeat`, `background-position`, `background-size`.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-margin-align"><h3>Margin и выравнивание блоков</h3><p>`margin` задаёт внешний отступ. Для центрирования блочного элемента с заданной шириной часто используют `margin-left/right: auto`.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-fonts"><h3>Шрифты</h3><p>`font-family`, `font-size`, `font-weight`, `font-style` задают семейство, размер, толщину и наклон текста.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-text-align"><h3>Выравнивание и подчёркивание текста</h3><p>`text-align` управляет горизонтальным выравниванием текста, `text-decoration` — подчёркиванием и другими линиями.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-line-letter"><h3>line-height и letter-spacing</h3><p>`line-height` задаёт высоту строки, `letter-spacing` — расстояние между буквами. На читаемость влияют сильнее, чем кажется.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + <article class="card" id="s-text-shadow"><h3>Тень текста</h3><p>`text-shadow: x y blur color;` добавляет тень к тексту. В тестах важно помнить порядок смещения, размытия и цвета.</p><a class="detail-link" href="#d-css-props">Подробно: CSS свойства</a></article> + </div> + </section> + + <section class="block" id="block-5"> + <h2>Блок 5. Flexbox Layout. Grid Layout</h2> + <div class="cards"> + <article class="card" id="s-flex-container"><h3>Flex-контейнер и оси</h3><p>`display: flex` создаёт flex-контейнер. Главная ось задаётся `flex-direction`, поперечная идёт перпендикулярно.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-inline-flex"><h3>Строчный flex-контейнер</h3><p>`display: inline-flex` делает контейнер flex-контейнером, но сам контейнер ведёт себя как строчный элемент во внешнем потоке.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-flex-align"><h3>Выравнивание по осям</h3><p>`justify-content` выравнивает по главной оси, `align-items` — по поперечной. `align-content` работает при нескольких строках.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-flex-grow"><h3>flex-grow, shrink, basis</h3><p>`flex-basis` — базовый размер, `flex-grow` — как элемент растёт, `flex-shrink` — как сжимается при нехватке места.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-grid-container"><h3>Grid-контейнер</h3><p>`display: grid` создаёт двумерную сетку. Колонки задаются `grid-template-columns`, строки — `grid-template-rows`.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-fr"><h3>Величина fr</h3><p>`fr` — доля свободного пространства grid-контейнера. `1fr 2fr` делит свободное место в пропорции 1 к 2.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + <article class="card" id="s-repeat-minmax"><h3>repeat и minmax</h3><p>`repeat(3, 1fr)` повторяет трек. `minmax(200px, 1fr)` задаёт минимум и максимум размера трека.</p><a class="detail-link" href="#d-layout">Подробно: Flex/Grid</a></article> + </div> + </section> + + <section class="block" id="block-django"> + <h2>Блоки 6-12. Django</h2> + <div class="cards"> + <article class="card" id="s-django-models"><h3>Создание моделей</h3><p>Модель — класс-наследник `models.Model`; поля класса описывают столбцы таблицы. Модели обычно лежат в `models.py` приложения.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-primary-key"><h3>Первичный ключ</h3><p>Первичный ключ уникально идентифицирует запись. Если не задать явно, Django создаёт поле `id` автоматически.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-migrations"><h3>Миграции</h3><p>`makemigrations` создаёт файлы миграций из изменений моделей, `migrate` применяет их к базе данных.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-django-meta"><h3>Class Meta</h3><p>`class Meta` задаёт метаданные модели: `ordering`, `verbose_name`, `db_table`, ограничения и другие настройки.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-null-blank"><h3>null=True и blank=True</h3><p>`null=True` разрешает `NULL` в БД. `blank=True` разрешает пустое значение на уровне форм/валидации Django.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-charfield"><h3>CharField</h3><p>`CharField` хранит короткую строку и требует `max_length`. Для длинного текста обычно берут `TextField`.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-foreignkey"><h3>ForeignKey</h3><p>`ForeignKey` задаёт связь многие-к-одному. `on_delete` определяет поведение при удалении связанного объекта; `related_name` задаёт имя обратной связи.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-manytomany"><h3>Many-to-Many</h3><p>`ManyToManyField` задаёт связь многие-ко-многим. Django создаёт промежуточную таблицу автоматически, либо можно указать свою через `through`.</p><a class="detail-link" href="#d-django-models">Подробно: Django models</a></article> + <article class="card" id="s-fbv"><h3>FBV</h3><p>Function-Based View — функция, которая принимает `request` и возвращает `HttpResponse`, `render`, `redirect` или ошибку.</p><a class="detail-link" href="#d-django-fbv">Подробно: Django FBV</a></article> + <article class="card" id="s-render"><h3>render</h3><p>`render(request, template, context)` рендерит шаблон с контекстом и возвращает `HttpResponse`.</p><a class="detail-link" href="#d-django-fbv">Подробно: Django FBV</a></article> + <article class="card" id="s-context"><h3>Передача данных в шаблон</h3><p>Данные передаются словарём context: ключи становятся именами переменных в шаблоне.</p><a class="detail-link" href="#d-django-fbv">Подробно: Django FBV</a></article> + <article class="card" id="s-get-object"><h3>Объект или 404</h3><p>`get_object_or_404(Model, pk=pk)` возвращает объект или генерирует HTTP 404, если записи нет.</p><a class="detail-link" href="#d-django-fbv">Подробно: Django FBV</a></article> + <article class="card" id="s-routing-fbv"><h3>Маршрутизация FBV</h3><p>В `urlpatterns` функция передаётся напрямую: `path("posts/<int:pk>/", views.detail, name="detail")`.</p><a class="detail-link" href="#d-django-fbv">Подробно: Django FBV</a></article> + <article class="card" id="s-cbv-types"><h3>TemplateView, DetailView, ListView</h3><p>`TemplateView` показывает шаблон, `DetailView` — один объект, `ListView` — список объектов.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-models"><h3>CBV и модели</h3><p>Для `ListView`/`DetailView` можно указать `model = Post`; Django сам построит queryset и стандартные имена шаблонов.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-extra"><h3>Дополнительные данные</h3><p>Дополнительный контекст обычно добавляют через `get_context_data`, вызывая `super()` и дополняя словарь.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-default-vars"><h3>Переменные по умолчанию</h3><p>`ListView` отдаёт `object_list` и `modelname_list`; `DetailView` отдаёт `object` и `modelname`.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-queryset"><h3>Переопределение выгрузки</h3><p>`get_queryset()` меняет список объектов, `get_object()` — получение одного объекта. Часто используют фильтрацию по пользователю или статусу.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-pagination"><h3>Паджинация</h3><p>В `ListView` достаточно задать `paginate_by = N`; в шаблоне появится `page_obj`.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-templates"><h3>Шаблоны по умолчанию</h3><p>Для `DetailView`: `app/model_detail.html`; для `ListView`: `app/model_list.html`, если не задан `template_name`.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-super"><h3>Вызов базовой логики</h3><p>При переопределении методов вроде `get_context_data` обычно сначала вызывают `super()`, чтобы не потерять стандартный контекст.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-cbv-routing"><h3>Маршрутизация CBV</h3><p>Класс подключается через `.as_view()`: `path("", PostListView.as_view(), name="post_list")`.</p><a class="detail-link" href="#d-django-cbv">Подробно: Django CBV</a></article> + <article class="card" id="s-django-urls"><h3>Django URLs</h3><p>`path()` задаёт маршрут, view, kwargs и имя. `re_path()` использует regex. `reverse()` строит URL по имени маршрута.</p><a class="detail-link" href="#d-django-urls">Подробно: Django URLs</a></article> + <article class="card" id="s-django-templates"><h3>Язык шаблонов Django</h3><p>Переменные пишутся как `{{ value }}`, теги как `{% for %}`, фильтры как `{{ name|lower }}`. Наследование делается через `extends` и `block`.</p><a class="detail-link" href="#d-django-templates">Подробно: Django templates</a></article> + <article class="card" id="s-django-queries"><h3>Django queries</h3><p>QuerySet ленивый и цепочечный. Важно знать `get`, `filter`, `exclude`, `order_by`, `annotate`, `aggregate`, `Q`, `F`, `select_related`, `prefetch_related`.</p><a class="detail-link" href="#d-django-queries">Подробно: Django queries</a></article> + <article class="card" id="s-django-forms"><h3>Django forms</h3><p>`forms.Form` — ручная форма, `ModelForm` строится по модели. Валидация через `is_valid`, `cleaned_data`, `clean_field`, `clean`.</p><a class="detail-link" href="#d-django-forms">Подробно: Django forms</a></article> + </div> + </section> + + <section class="details" id="details"> + <h2>Подробные заметки</h2> + + <article class="note" id="d-ip"> + <h3>IP-адресация, IPv4, IPv6</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/IP-адрес.md">IP-адрес</a>, <a href="../../Networking/Протоколы/IPv6.md">IPv6</a></p> + <p>В интернете используются адреса разных уровней: физический адрес интерфейса, сетевой IP-адрес и символьное DNS-имя. IPv4 записывается четырьмя октетами, например `192.168.1.10`. IPv6 использует 128 бит и записывается группами шестнадцатеричных чисел.</p> + <div class="exam">В тесте часто спрашивают: IPv4 = 32 бита, IPv6 = 128 бит, IPv4 октет = 0-255, IPv6 не совместим напрямую с IPv4.</div> + <p class="back"><a href="#s-ip-addressing">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-tcp"> + <h3>TCP</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/TCP vs UDP.md">TCP vs UDP</a></p> + <p>TCP устанавливает соединение перед передачей данных, делит данные на сегменты, нумерует их, подтверждает доставку и повторяет потерянные данные. За это платит дополнительными задержками и служебным трафиком.</p> + <div class="exam">В тесте: TCP — надёжный, connection-oriented; UDP — быстрее и проще, но без гарантий доставки и порядка.</div> + <p class="back"><a href="#s-tcp">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-subnet"> + <h3>Подсети и маска подсети</h3> + <p class="note-source">Vault: <a href="../../Networking/Подсети и маска подсети.md">Подсети и маска подсети</a></p> + <p>Маска подсети определяет, какие биты IPv4-адреса относятся к сети, а какие к хосту. Запись `/24` равна маске `255.255.255.0`: первые 24 бита — сеть, последние 8 — хосты.</p> + <div class="exam">Запомнить: чем больше префикс `/N`, тем меньше адресов в подсети.</div> + <p class="back"><a href="#s-subnet">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-nat"> + <h3>NAT, приватные адреса, localhost</h3> + <p class="note-source">Vault: <a href="../../Networking/NAT.md">NAT</a>, <a href="../../Networking/Подсети и маска подсети.md">Подсети и маска подсети</a></p> + <p>NAT переводит приватные IPv4-адреса во внешний публичный адрес. Частые приватные диапазоны: `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`. Loopback-диапазон `127.0.0.0/8` не используется для обмена между узлами сети; `127.0.0.1` и `localhost` указывают на текущую машину.</p> + <div class="exam">В тесте: NAT экономит публичные IPv4 и скрывает внутреннюю адресацию, но ломает прямую end-to-end связность.</div> + <p class="back"><a href="#s-nat-localhost">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-dns"> + <h3>DNS и DNS-серверы</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/DNS.md">DNS</a></p> + <p>DNS — распределённая база данных, которая по доменному имени возвращает IP-адрес или другие записи. Типичная цепочка: локальный кэш/hosts, resolver провайдера, root-серверы, TLD-серверы, авторитативные серверы домена.</p> + <div class="exam">В тесте: root не знает IP конкретного сайта, он направляет к TLD; авторитативный сервер знает записи домена.</div> + <p class="back"><a href="#s-dns">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-http"> + <h3>HTTP и HTTP-сообщения</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/HTTP, HTTPS и HTTP3.md">HTTP, HTTPS и HTTP/3</a></p> + <p>HTTP — протокол прикладного уровня. Запрос и ответ состоят из стартовой строки, заголовков, пустой строки и необязательного тела. Методы описывают действие над ресурсом, заголовки передают метаданные, коды ответа показывают результат обработки.</p> + <table><tr><th>Метод</th><th>Смысл</th></tr><tr><td>`GET`</td><td>Получить ресурс</td></tr><tr><td>`POST`</td><td>Отправить данные</td></tr><tr><td>`PUT`</td><td>Создать/заменить ресурс</td></tr><tr><td>`PATCH`</td><td>Частично изменить ресурс</td></tr><tr><td>`DELETE`</td><td>Удалить ресурс</td></tr></table> + <div class="exam">В тесте: `4xx` — проблема на стороне клиента, `5xx` — проблема на стороне сервера.</div> + <p class="back"><a href="#s-http">Назад к HTTP</a> · <a href="#s-http-message">Назад к HTTP-сообщениям</a></p> + </article> + + <article class="note" id="d-https"> + <h3>HTTPS</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/HTTP, HTTPS и HTTP3.md">HTTP, HTTPS и HTTP/3</a></p> + <p>HTTPS — это HTTP, защищённый TLS. Сертификат связывает домен с ключами и подтверждает подлинность сервера. TLS обеспечивает шифрование, целостность и защиту от подмены трафика.</p> + <div class="exam">В тесте: HTTP порт `80`, HTTPS порт `443`; Basic auth без HTTPS небезопасен.</div> + <p class="back"><a href="#s-https">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-http3"> + <h3>HTTP/3</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/HTTP, HTTPS и HTTP3.md">HTTP, HTTPS и HTTP/3</a></p> + <p>HTTP/3 переносит HTTP на QUIC поверх UDP. QUIC делает потоки независимыми: потеря пакета не блокирует все запросы внутри соединения, как это возможно в HTTP/2 поверх TCP. TLS 1.3 встроен в QUIC.</p> + <div class="exam">В тесте: HTTP/3 не меняет методы и коды HTTP, меняет транспорт: UDP/QUIC вместо TCP.</div> + <p class="back"><a href="#s-http3">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-ports"> + <h3>Сетевые порты</h3> + <p class="note-source">Vault: <a href="../../Networking/Сетевые порты.md">Сетевые порты</a></p> + <p>Порт уточняет приложение-получателя внутри хоста. Номер порта находится в диапазоне `0-65535`. Порты TCP и UDP независимы: `53/tcp` и `53/udp` — разные конечные точки.</p> + <div class="exam">Минимум к запоминанию: HTTP `80`, HTTPS `443`, DNS `53`, SSH `22`, SMTP `25`.</div> + <p class="back"><a href="#s-ports">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-auth"> + <h3>Идентификация, аутентификация, авторизация</h3> + <p class="note-source">Vault: <a href="../../Networking/Веб-аутентификация и авторизация.md">Веб-аутентификация и авторизация</a></p> + <p>Идентификация сообщает системе идентификатор субъекта. Аутентификация проверяет подлинность. Авторизация выдаёт права на действия. В HTTP встречаются схемы Basic, Digest и Bearer.</p> + <div class="exam">В тесте не путать: логин — идентификация, пароль/код — аутентификация, доступ к админке — авторизация.</div> + <p class="back"><a href="#s-auth">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-oauth"> + <h3>OAuth 2.0</h3> + <p class="note-source">Vault: <a href="../../Networking/OAuth 2.0.md">OAuth 2.0</a></p> + <p>OAuth 2.0 позволяет стороннему приложению получить ограниченный доступ к ресурсам пользователя. Вместо пароля приложение получает токен с конкретными правами и сроком жизни.</p> + <div class="exam">В тесте: OAuth 2.0 — авторизация, не парольная аутентификация. Для входа поверх OAuth обычно нужен OpenID Connect.</div> + <p class="back"><a href="#s-oauth">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-uri"> + <h3>URI, URL, URN</h3> + <p class="note-source">Vault: <a href="../../Networking/Протоколы/URI, URL, URN.md">URI, URL, URN</a></p> + <p>URL показывает, где находится ресурс и как его получить: схема, хост, порт, путь, параметры, фрагмент. URN задаёт стабильное имя ресурса без места получения. URI — общее понятие для идентификаторов ресурсов.</p> + <div class="exam">Главная формула: URL ⊂ URI; URN ⊂ URI; не каждый URI является URL.</div> + <p class="back"><a href="#s-uri">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-html"> + <h3>HTML</h3> + <p class="note-source">Vault: <a href="Основы HTML (структура, таблицы, формы).md">Основы HTML (структура, таблицы, формы)</a></p> + <p>HTML описывает структуру документа. Важно знать базовый каркас, роль `head` и `body`, блочные и строчные элементы, семантические теги, атрибуты `class`/`id`, ссылки, изображения, списки и таблицы.</p> + <div class="exam">В тесте: `class` можно повторять, `id` должен быть уникальным; таблицы — для табличных данных, не для макета.</div> + <p class="back"><a href="#block-2">Назад к краткому блоку HTML</a></p> + </article> + + <article class="note" id="d-html-forms"> + <h3>HTML Forms</h3> + <p class="note-source">Vault: <a href="Основы HTML (структура, таблицы, формы).md">Основы HTML (структура, таблицы, формы)</a></p> + <p>Форма отправляет данные на сервер. `action` задаёт URL, `method` — способ отправки. `label` связывается с полем через `for` и `id`. `name` определяет имя параметра при отправке. `required` и типы input помогают браузерной валидации, но не заменяют серверную проверку.</p> + <div class="exam">В тесте: у radio-кнопок одной группы должен быть одинаковый `name`; у `button` внутри формы лучше явно задавать `type`.</div> + <p class="back"><a href="#block-3">Назад к краткому блоку HTML Forms</a></p> + </article> + + <article class="note" id="d-css-selectors"> + <h3>CSS selectors</h3> + <p class="note-source">Vault: <a href="Основы, селекторы и блочная модель.md">CSS: Основы и селекторы</a></p> + <p>CSS-селектор выбирает элементы, к которым применяются правила. Нужно различать селекторы тега, класса, id, атрибута, псевдокласса и комбинаторы. Каскад учитывает важность, специфичность и порядок правил.</p> + <div class="exam">Специфичность: inline > ID > класс/атрибут/псевдокласс > тег/псевдоэлемент.</div> + <p class="back"><a href="#block-4">Назад к краткому блоку CSS</a></p> + </article> + + <article class="note" id="d-css-props"> + <h3>CSS базовые свойства</h3> + <p class="note-source">Vault: <a href="Основы, селекторы и блочная модель.md">CSS: Основы и селекторы</a></p> + <p>Блочная модель состоит из content, padding, border и margin. `box-sizing` меняет расчёт ширины. Текстовые свойства управляют шрифтами, выравниванием, межстрочным расстоянием, расстоянием между буквами и декором текста. Фон задаётся через группу `background-*`.</p> + <div class="exam">В тесте: `width` при `content-box` не включает padding/border, при `border-box` включает.</div> + <p class="back"><a href="#block-4">Назад к краткому блоку CSS</a></p> + </article> + + <article class="note" id="d-layout"> + <h3>Flexbox и Grid</h3> + <p class="note-source">Vault: <a href="Адаптивность, Flexbox и Grid.md">CSS: Адаптивность, Flexbox и Grid</a></p> + <p>Flexbox — одномерная модель раскладки по главной и поперечной оси. Grid — двумерная сетка строк и колонок. Flex удобен для распределения элементов в строке или колонке, Grid — для общего макета страницы.</p> + <div class="exam">В тесте: `justify-content` работает по главной оси flex, `align-items` — по поперечной; `fr` — доля свободного пространства Grid.</div> + <p class="back"><a href="#block-5">Назад к краткому блоку Flex/Grid</a></p> + </article> + + <article class="note" id="d-django-models"> + <h3>Django models</h3> + <p class="note-source">Vault: <a href="../Python/Модели и ORM.md">Django Модели и ORM</a></p> + <p>Модели описывают структуру таблиц и связи между ними. `CharField` требует `max_length`; `ForeignKey` задаёт `on_delete`; `ManyToManyField` создаёт промежуточную таблицу или использует указанную через `through`. Миграции переносят изменения моделей в БД.</p> + <div class="exam">В тесте: `null=True` относится к БД, `blank=True` — к формам/валидации Django.</div> + <p class="back"><a href="#block-django">Назад к краткому блоку Django</a></p> + </article> + + <article class="note" id="d-django-fbv"> + <h3>Django FBV</h3> + <p class="note-source">Vault: <a href="../Python/Представления, шаблоны и CBV.md">Django: Представления, шаблоны и CBV</a></p> + <p>FBV — обычная функция-представление. Она принимает `request`, получает данные, вызывает `render` или возвращает другой `HttpResponse`. Маршрутизируется через `path()` прямой передачей функции.</p> + <div class="exam">В тесте: `render(request, template, context)` возвращает HTTP-ответ; `get_object_or_404` возвращает объект или 404.</div> + <p class="back"><a href="#block-django">Назад к краткому блоку Django</a></p> + </article> + + <article class="note" id="d-django-cbv"> + <h3>Django CBV</h3> + <p class="note-source">Vault: <a href="../Python/Представления, шаблоны и CBV.md">Django: Представления, шаблоны и CBV</a></p> + <p>CBV — классовые представления с готовой логикой. `TemplateView` показывает шаблон, `ListView` выводит список, `DetailView` выводит один объект. В URL подключаются через `.as_view()`.</p> + <div class="exam">В тесте: `ListView` по умолчанию даёт `object_list`, `DetailView` — `object`; шаблоны по умолчанию `model_list.html` и `model_detail.html`.</div> + <p class="back"><a href="#block-django">Назад к краткому блоку Django</a></p> + </article> + + <article class="note" id="d-django-urls"> + <h3>Django URLs</h3> + <p class="note-source">Vault: <a href="../Python/Представления, шаблоны и CBV.md">Django: Представления, шаблоны и CBV</a></p> + <p>`urlpatterns` связывает URL с представлениями. `path()` использует route, view, kwargs и name. Конвертеры вроде `int`, `slug`, `uuid`, `path` извлекают параметры. `reverse()` и `{% url %}` строят URL по имени маршрута.</p> + <div class="exam">В тесте: не хардкодить URL, если есть именованный маршрут и `reverse`/`url`.</div> + <p class="back"><a href="#s-django-urls">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-django-templates"> + <h3>Язык шаблонов Django</h3> + <p class="note-source">Vault: <a href="../Python/Представления, шаблоны и CBV.md">Django: Представления, шаблоны и CBV</a></p> + <p>DTL использует переменные `{{ value }}`, теги `{% tag %}` и фильтры `{{ value|filter }}`. Наследование строится через `{% extends %}` и `{% block %}`. Статика подключается через `{% load static %}` и `{% static 'path' %}`.</p> + <div class="exam">В тесте: функции Python с произвольными аргументами напрямую из шаблона вызывать нельзя; используют теги, фильтры или подготовку данных во view.</div> + <p class="back"><a href="#s-django-templates">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-django-queries"> + <h3>Django queries</h3> + <p class="note-source">Vault: <a href="../Python/Модели и ORM.md">Django Модели и ORM</a></p> + <p>QuerySet ленив: запрос выполняется при фактическом обращении к данным. Методы можно цепочечно комбинировать. `get()` возвращает один объект или ошибку, `filter()` возвращает QuerySet, `aggregate()` возвращает итоговый словарь, `annotate()` добавляет вычисляемые поля к объектам.</p> + <div class="exam">В тесте: `select_related` — для ForeignKey/OneToOne через JOIN; `prefetch_related` — для ManyToMany и обратных связей отдельными запросами.</div> + <p class="back"><a href="#s-django-queries">Назад к краткой теме</a></p> + </article> + + <article class="note" id="d-django-forms"> + <h3>Django forms</h3> + <p class="note-source">Vault: <a href="../Python/Работа с формами и CUD.md">Django: Работа с формами и CUD</a></p> + <p>`forms.Form` описывает форму вручную, `forms.ModelForm` строится по модели через `Meta`. `is_valid()` запускает валидацию, `cleaned_data` содержит очищенные данные, `clean_<field>()` валидирует поле, `clean()` — форму целиком. `widget` управляет HTML-представлением поля.</p> + <div class="exam">В тесте: `form.save()` есть у ModelForm; серверная валидация обязательна, HTML `required` не защита.</div> + <p class="back"><a href="#s-django-forms">Назад к краткой теме</a></p> + </article> + </section> + + <p class="back"><a href="#top">Наверх</a></p> +</main> +</body> +</html>