Files
SecondBrain/.obsidian/workspace.json
T
2026-05-31 10:28:49 +03:00

294 lines
108 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"main": {
"id": "5324373015726ba8",
"type": "split",
"children": [
{
"id": "4334af5869448aa1",
"type": "tabs",
"children": [
{
"id": "28d74d490ab22900",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "90 Library/Programming/Web/CSS: Адаптивность, Flexbox и Grid.md",
"mode": "source",
"source": false,
"backlinks": false
},
"icon": "lucide-file",
"title": "CSS: Адаптивность, Flexbox и Grid"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "a9c2d5e65288011a",
"type": "split",
"children": [
{
"id": "383cca303cf4b57d",
"type": "tabs",
"children": [
{
"id": "27e6486165131cfa",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": true
},
"icon": "lucide-folder-closed",
"title": "Files"
}
},
{
"id": "66079465678173e5",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "tag:#gym",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "Search"
}
},
{
"id": "c2541ce190da912e",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "Bookmarks"
}
},
{
"id": "673ce6e6c09cfc9c",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "Tags"
}
}
]
}
],
"direction": "horizontal",
"width": 233
},
"right": {
"id": "38c591aa0966839e",
"type": "split",
"children": [
{
"id": "86a193b1d3159ff8",
"type": "tabs",
"children": [
{
"id": "06940eb960fc1db5",
"type": "leaf",
"pinned": true,
"state": {
"type": "terminal:terminal",
"state": {
"terminal:terminal": {
"cwd": "/home/ada/Documents/Vaults/SecondBrain",
"focus": false,
"profile": {
"args": [
"--login"
],
"executable": "/usr/bin/zsh",
"followTheme": true,
"name": "ZSH",
"platforms": {
"darwin": false,
"linux": true
},
"pythonExecutable": "python3",
"restoreHistory": true,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"fontFamily": "FiraCode Nerd Font Mono",
"documentOverride": null
},
"type": "integrated",
"useWin32Conhost": false
},
"profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055",
"serial": {
"columns": 32,
"data": "\u001b[48;5;22m \u001b[2m \u001b[38;2;205;214;244;22m, обновить, удалить.\u001b[3X\r\n\u001b[0m \u001b[2m 22\r\n\u001b[48;5;52;22m \u001b[2m 20 \u001b[31;22m-\u001b[38;2;147;153;178;2m**\u001b[38;2;243;139;168;1mCUD (Create, Update,\u001b[1X\r\n\u001b[39;22;22m \u001b[2m \u001b[38;2;243;139;168;1mDelete)\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m — операции из\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mменения данных. Django\u001b[1X\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mпредоставляет мощную по\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mдсистему форм для их ре\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mализации.\u001b[14X\r\n\u001b[39;48;5;22;22m \u001b[2m 23 \u001b[32;22m+\u001b[38;2;205;214;244mФорма в Django — это сл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mой между HTML-формой и\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mPython-кодом. Она прини\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mмает данные от пользова\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтеля, проверяет их, при\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mводит к нормальным типа\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mм и помогает сохранить\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрезультат.\u001b[13X\r\n\u001b[0m \u001b[2m 24\r\n\u001b[0m \u001b[2m 25 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mТипы форм\r\n\u001b[39;48;5;52m \u001b[2m 23 \u001b[31;22m-\u001b[38;2;205;214;244;2m1\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mforms.Form\u001b[38;2;147;153;178;22m`**\u001b[38;2;205;214;244m: Дл\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mя общих задач (поиск, о\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mбратная связь), не прив\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mязанных к моделям.\u001b[5X\r\n\u001b[39;22m \u001b[2m 24 \u001b[31;22m-\u001b[38;2;205;214;244;2m2\u001b[38;2;147;153;178m.\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mforms.ModelForm\u001b[38;2;147;153;178;22m`*\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m*\u001b[38;2;205;214;244m: Автоматическая генер\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mация полей на основе мо\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mдели.\u001b[18X\r\n\u001b[39;48;5;22;22m \u001b[2m 26 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mforms.Form\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ычная форма, не привяза\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и email.\u001b[15X\r\n\u001b[39m \u001b[2m 27 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mforms.ModelForm\u001b[38;2;147;153;178;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ли. Django сам создаёт\u001b[1X\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;147;153;178m`\u001b[38;2;205;214;244mform.save(\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 28 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 29 \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мую — чаще подходит \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mfo\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mrms.Form\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m. Если форма с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоздаёт или редактирует\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mмодель — проще использо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвать \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mforms.ModelForm\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[0m \u001b[2m 30\u001b[25X\r\n\u001b[0m \u001b[2m 31 \u001b[0m \u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mpython\r\n\u001b[39;48;5;22m \u001b[2m 32 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m django \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m form\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ms\r\n\u001b[39m \u001b[2m 33 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 34 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m \u001b[38;2;203;166;247m.\u001b[38;2;205;214;244mmodels \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m Blo\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mg\r\n\u001b[39m \u001b[2m 35 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 36 \u001b[32;22m+\r\n\u001b[0m \u001b[2m 37 \u001b[0m \u001b[38;2;203;166;247mclass\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mBlogForm\u001b[38;2;147;153;178m(\u001b[38;2;249;226;175mforms\u001b[38;2;148;226;213m.\u001b[38;2;249;226;175mMo\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22mdelForm\u001b[38;2;147;153;178m):\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 39 \u001b[0m \u001b[38;2;166;227;161m model = Blog\r\n\u001b[39;48;5;52m \u001b[2m 30 \u001b[31;22m-\u001b[38;2;166;227;161;2m fields = ['name\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161m', 'tagline']\r\n\u001b[39;48;5;22;22m \u001b[2m 40 \u001b[32;22m+\u001b[38;2;166;227;161m fields = [\"name\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22m\", \"tagline\"]\r\n\u001b[0m \u001b[2m 41 \u001b[0m \u001b[38;2;166;227;161m widgets = {\u001b[4X\r\n\u001b[39;48;5;52m \u001b[2m 32 \u001b[31;22m-\u001b[38;2;166;227;161;2m 'name': for\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mms.TextInput(attrs={'cl\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mass': 'form-control'})\r\n\u001b[39;48;5;22;22m \u001b[2m 42 \u001b[32;22m+\u001b[38;2;166;227;161m \"name\": for\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mms.TextInput(attrs={\"cl\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mass\": \"form-control\"})\r\n\u001b[0m \u001b[2m 43 \u001b[0m \u001b[38;2;166;227;161m }\u001b[14X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 48 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mЖизненный цикл формы\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22m в представлении\r\n\u001b[39;48;5;22m \u001b[2m 49 \u001b[32;22m+\u001b[38;2;205;214;244mОбычно view работает та\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mк:\r\n\u001b[39m \u001b[2m 50 \u001b[32;22m+\u001b[38;2;205;214;244m1\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 создаёт пу\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 51 \u001b[32;22m+\u001b[38;2;205;214;244m2\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 создаёт ф\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mорму из \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mrequest.POST\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;244m3\u001b[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;244mis_valid()\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m 53 \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 \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;244mredirect\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m 54 \u001b[32;22m+\u001b[38;2;205;214;244m5\u001b[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 55 \u001b[32;22m+\r\n\u001b[0m \u001b[2m 56 \u001b[0m \u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mpython\u001b[14X\r\n\u001b[39;48;5;22m \u001b[2m 57 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m django\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244mshortcuts \u001b[38;2;203;166;247mi\r\n\u001b[39m \u001b[2m \u001b[38;2;203;166;247;22mmport\u001b[38;2;205;214;244m redirect\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m render\r\n\u001b[39m \u001b[2m 58 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 59 \u001b[32;22m+\r\n\u001b[0m \u001b[2m 60 \u001b[0m \u001b[38;2;203;166;247mdef\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mcontact_view\u001b[38;2;147;153;178m(\u001b[38;2;235;160;172mreques\r\n\u001b[0m \u001b[2m \u001b[38;2;235;160;172;22mt\u001b[38;2;147;153;178m):\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 62 \u001b[0m \u001b[38;2;166;227;161m form = ContactF\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22morm(request.POST)\r\n\u001b[39;48;5;22m \u001b[2m 63 \u001b[32;22m+\u001b[23X\r\n\u001b[0m \u001b[2m 64 \u001b[0m \u001b[38;2;166;227;161m if form.is_vali\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22md():\r\n\u001b[39;48;5;52m \u001b[2m 44 \u001b[31;22m-\u001b[38;2;166;227;161;2m # Данные оч\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mищены и доступны в form\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161m.cleaned_data\r\n\u001b[0m \u001b[2m 65 \u001b[0m \u001b[38;2;166;227;161m data = form\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22m.cleaned_data\r\n\u001b[39;48;5;52m \u001b[2m 46 \u001b[31;22m-\u001b[38;2;166;227;161;2m # Действие\u001b[1X\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161m(сохранение или отправк\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mа email)\r\n\u001b[39;22m \u001b[2m 47 \u001b[31;22m-\u001b[38;2;166;227;161;2m return redi\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mrect('success')\r\n\u001b[39;48;5;22;22m \u001b[2m 66 \u001b[32;22m+\u001b[38;2;166;227;161m send_email(\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mdata[\"email\"], data[\"me\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mssage\"])\r\n\u001b[39m \u001b[2m 67 \u001b[32;22m+\u001b[38;2;166;227;161m return redi\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mrect(\"success\")\r\n\u001b[0m \u001b[2m 68 \u001b[0m \u001b[38;2;166;227;161m else:\u001b[14X\r\n\u001b[0m \u001b[2m 69 \u001b[0m \u001b[38;2;166;227;161m form = ContactF\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22morm()\r\n\u001b[39;48;5;52m \u001b[2m 50 \u001b[31;22m-\u001b[38;2;166;227;161;2m return render(reque\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mst, 'contact.html', {'f\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161morm': form})\r\n\u001b[39;48;5;22;22m \u001b[2m 70 \u001b[32;22m+\u001b[23X\r\n\u001b[39m \u001b[2m 71 \u001b[32;22m+\u001b[38;2;166;227;161m return render(reque\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mst, \"contact.html\", {\"f\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22morm\": form})\r\n\u001b[0m \u001b[2m 72 \u001b[0m \u001b[38;2;147;153;178m```\u001b[20X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 76 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mВалидация и очистка\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22mданных\r\n\u001b[39;48;5;52m \u001b[2m 56 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mis_valid()\u001b[38;2;147;153;178;22m`**\u001b[38;2;205;214;244m: Зап\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mускает процесс проверки\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m 57 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mАвтоматическая очис\r\n\u001b[39;22;22m \u001b[2m \u001b[38;2;243;139;168;1mтка\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m: Превращает текст\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m в типы Python (наприме\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mр, строку в \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mdatetime\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m)\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m 58 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mclean_<fieldname>(\r\n\u001b[39;22;22m \u001b[2m \u001b[38;2;243;139;168;1m)\u001b[38;2;147;153;178;22m`**\u001b[38;2;205;214;244m: Валидация конкрет\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mного поля.\r\n\u001b[39;22m \u001b[2m 59 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mclean()\u001b[38;2;147;153;178;22m`**\u001b[38;2;205;214;244m: Валида\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mция всей формы (сравнен\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mие полей).\r\n\u001b[39;48;5;22;22m \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;243;139;168;1mis_valid()\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пускает проверку формы.\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;244mform.cleaned_data\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;22mform.errors\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;243;139;168;1mАвтоматическая очис\r\n\u001b[39;22m \u001b[2m \u001b[38;2;243;139;168;1;22mтка\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m — Django превраща\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mет строки из HTML-формы\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 \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mint\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, дату в \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mdate\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22memail в строку после пр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mоверки формата.\r\n\u001b[39m \u001b[2m 79 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mclean_<fieldname>(\r\n\u001b[39;22m \u001b[2m \u001b[38;2;243;139;168;1;22m)\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конкретного поля.\r\n\u001b[39m \u001b[2m 80 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mclean()\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рка всей формы, когда н\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 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;244mpython\r\n\u001b[39m \u001b[2m 83 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m django \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m form\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ms\r\n\u001b[39m \u001b[2m 84 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 85 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 86 \u001b[32;22m+\u001b[38;2;203;166;247mclass\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mRegisterForm\u001b[38;2;147;153;178m(\u001b[38;2;249;226;175mform\r\n\u001b[39m \u001b[2m \u001b[38;2;249;226;175;22ms\u001b[38;2;148;226;213m.\u001b[38;2;249;226;175mForm\u001b[38;2;147;153;178m):\r\n\u001b[39m \u001b[2m 87 \u001b[32;22m+\u001b[38;2;205;214;244m username \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mforms\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mCh\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22marField\u001b[38;2;147;153;178m(\u001b[38;2;235;160;172mmax_length\u001b[38;2;148;226;213m=\u001b[38;2;250;179;135m50\u001b[38;2;147;153;178m)\r\n\u001b[39m \u001b[2m 88 \u001b[32;22m+\u001b[38;2;205;214;244m password \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mforms\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mCh\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22marField\u001b[38;2;147;153;178m(\u001b[38;2;235;160;172mwidget\u001b[38;2;148;226;213m=\u001b[38;2;205;214;244mforms\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244mPa\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22msswordInput\u001b[38;2;147;153;178m)\r\n\u001b[39m \u001b[2m 89 \u001b[32;22m+\u001b[38;2;205;214;244m password_repeat \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mf\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22morms\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mCharField\u001b[38;2;147;153;178m(\u001b[38;2;235;160;172mwidget\u001b[38;2;148;226;213m=\u001b[38;2;205;214;244mf\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22morms\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244mPasswordInput\u001b[38;2;147;153;178m)\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;244m \u001b[38;2;203;166;247mdef\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mclean_username\u001b[38;2;147;153;178m(\r\n\u001b[39m \u001b[2m \u001b[38;2;235;160;172;22mself\u001b[38;2;147;153;178m):\r\n\u001b[39m \u001b[2m 92 \u001b[32;22m+\u001b[38;2;205;214;244m username \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;235;160;172mself\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22m.\u001b[38;2;235;160;172mcleaned_data\u001b[38;2;147;153;178m[\u001b[38;2;166;227;161m\"username\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22m\"\u001b[38;2;147;153;178m]\r\n\u001b[39m \u001b[2m 93 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 94 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mif\u001b[38;2;205;214;244m \u001b[38;2;137;180;250musername\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mlow\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mer\u001b[38;2;147;153;178m()\u001b[38;2;205;214;244m \u001b[38;2;148;226;213m==\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"admin\"\u001b[38;2;147;153;178m:\r\n\u001b[39m \u001b[2m 95 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mraise\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mforms\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22m.\u001b[38;2;137;180;250mValidationError\u001b[38;2;147;153;178m(\u001b[38;2;166;227;161m\"Это и\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mмя нельзя использовать\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m)\r\n\u001b[39m \u001b[2m 96 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 97 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mreturn\u001b[38;2;205;214;244m username\r\n\u001b[39m \u001b[2m 98 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 99 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mdef\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mclean\u001b[38;2;147;153;178m(\u001b[38;2;235;160;172mself\u001b[38;2;147;153;178m):\r\n\u001b[39m \u001b[2m100 \u001b[32;22m+\u001b[38;2;205;214;244m cleaned_data \u001b[38;2;148;226;213m=\r\n\u001b[39m \u001b[2m \u001b[38;2;250;179;135;22msuper\u001b[38;2;147;153;178m()\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mclean\u001b[38;2;147;153;178m()\r\n\u001b[39m \u001b[2m101 \u001b[32;22m+\u001b[38;2;205;214;244m password \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mclea\r\n\u001b[39m \u001b[2m \u001b[38;2;137;180;250;22mned_data\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mget\u001b[38;2;147;153;178m(\u001b[38;2;166;227;161m\"password\"\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m)\r\n\u001b[39m \u001b[2m102 \u001b[32;22m+\u001b[38;2;205;214;244m password_repeat\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m \u001b[38;2;148;226;213m=\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mcleaned_data\u001b[38;2;148;226;213m.\u001b[38;2;137;180;250mget\u001b[38;2;147;153;178m(\u001b[38;2;166;227;161m\"pa\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mssword_repeat\"\u001b[38;2;147;153;178m)\r\n\u001b[39m \u001b[2m103 \u001b[32;22m+\r\n\u001b[39m \u001b[2m104 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mif\u001b[38;2;205;214;244m password \u001b[38;2;203;166;247mand\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m password_repeat \u001b[38;2;203;166;247mand\u001b[38;2;205;214;244m pa\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mssword \u001b[38;2;148;226;213m!=\u001b[38;2;205;214;244m password_repe\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mat\u001b[38;2;147;153;178m:\r\n\u001b[39m \u001b[2m105 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mraise\u001b[38;2;205;214;244m \u001b[38;2;137;180;250mforms\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22m.\u001b[38;2;137;180;250mValidationError\u001b[38;2;147;153;178m(\u001b[38;2;166;227;161m\"Парол\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mи не совпадают\"\u001b[38;2;147;153;178m)\r\n\u001b[39m \u001b[2m106 \u001b[32;22m+\r\n\u001b[39m \u001b[2m107 \u001b[32;22m+\u001b[38;2;205;214;244m \u001b[38;2;203;166;247mreturn\u001b[38;2;205;214;244m cleaned_\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mdata\r\n\u001b[39m \u001b[2m108 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[0m \u001b[2m109\u001b[25X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m112 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mGeneric Editing View\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22ms (CBV для CUD)\r\n\u001b[39;48;5;52m \u001b[2m 64 \u001b[31;22m-\u001b[38;2;205;214;244;2mDjango предоставляет го\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mтовые классы для CRUD:\r\n\u001b[39;22m \u001b[2m 65 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mCreateView\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m: Созда\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mние объекта.\r\n\u001b[39;22m \u001b[2m 66 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mUpdateView\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m: Редак\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mтирование (требует \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mpk\u001b[38;2;147;153;178m`\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m в URL).\r\n\u001b[39;22m \u001b[2m 67 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mDeleteView\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m: Удале\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mние (требует подтвержде\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mния через POST).\r\n\u001b[39;48;5;22;22m \u001b[2m113 \u001b[32;22m+\u001b[38;2;205;214;244mDjango предоставляет го\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[2m114 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mCreateView\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здать объект.\r\n\u001b[39m \u001b[2m115 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mUpdateView\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менить объект; обычно и\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mщет его по \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mpk\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m из URL.\r\n\u001b[39m \u001b[2m116 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**`\u001b[38;2;243;139;168;1mDeleteView\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алить объект; требует п\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодтверждения через \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPOS\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m117 \u001b[32;22m+\r\n\u001b[39m \u001b[2m118 \u001b[32;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;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 \u001b[38;2;205;214;244;22mPOST\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mis_valid()\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;22msave()\u001b[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;22mURL после успеха.\r\n\u001b[0m \u001b[2m119\u001b[25X\r\n\u001b[48;5;52;22m \u001b[2m 69 \u001b[31;22m-\u001b[38;2;147;153;178;2m**\u001b[38;2;243;139;168;1mПример:\u001b[38;2;147;153;178;22m**\u001b[12X\r\n\u001b[0m \u001b[2m120 \u001b[0m \u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mpython\u001b[14X\r\n\u001b[39;48;5;22m \u001b[2m121 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m django\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244murls \u001b[38;2;203;166;247mimport\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m reverse_lazy\r\n\u001b[39m \u001b[2m122 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m django\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244mviews\u001b[38;2;148;226;213m.\u001b[38;2;205;214;244mgener\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mic \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m CreateView\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;22meleteView\u001b[38;2;147;153;178m,\u001b[38;2;205;214;244m UpdateView\r\n\u001b[39m \u001b[2m123 \u001b[32;22m+\r\n\u001b[39m \u001b[2m124 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m \u001b[38;2;203;166;247m.\u001b[38;2;205;214;244mforms \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m Blog\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mForm\r\n\u001b[39m \u001b[2m125 \u001b[32;22m+\u001b[38;2;203;166;247mfrom\u001b[38;2;205;214;244m \u001b[38;2;203;166;247m.\u001b[38;2;205;214;244mmodels \u001b[38;2;203;166;247mimport\u001b[38;2;205;214;244m Blo\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mg\r\n\u001b[39m \u001b[2m126 \u001b[32;22m+\r\n\u001b[39m \u001b[2m127 \u001b[32;22m+\r\n\u001b[0m \u001b[2m128 \u001b[0m \u001b[38;2;203;166;247mclass\u001b[38;2;205;214;244m \u001b[38;2;249;226;175mBlogCreateView\u001b[38;2;147;153;178m(\u001b[38;2;249;226;175mCr\r\n\u001b[0m \u001b[2m \u001b[38;2;249;226;175;22meateView\u001b[38;2;147;153;178m):\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m131 \u001b[0m \u001b[38;2;166;227;161m template_name = \"bl\r\n\u001b[0m \u001b[2m \u001b[38;2;166;227;161;22mog/blog_form.html\"\r\n\u001b[39;48;5;52m \u001b[2m 75 \u001b[31;22m-\u001b[38;2;166;227;161;2m success_url = rever\r\n\u001b[39;22m \u001b[2m \u001b[38;2;166;227;161mse_lazy('blog_list')\r\n\u001b[39;48;5;22;22m \u001b[2m132 \u001b[32;22m+\u001b[38;2;166;227;161m success_url = rever\r\n\u001b[39m \u001b[2m \u001b[38;2;166;227;161;22mse_lazy(\"blog_list\")\r\n\u001b[39m \u001b[2m133 \u001b[32;22m+\r\n\u001b[39m \u001b[2m134 \u001b[32;22m+\r\n\u001b[39m \u001b[2m135 \u001b[32;22m+\u001b[38;2;205;214;244mclass BlogUpdateView(Up\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mdateView):\r\n\u001b[39m \u001b[2m136 \u001b[32;22m+\u001b[38;2;205;214;244m model = Blog\r\n\u001b[39m \u001b[2m137 \u001b[32;22m+\u001b[38;2;205;214;244m form_class = BlogFo\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mrm\r\n\u001b[39m \u001b[2m138 \u001b[32;22m+\u001b[38;2;205;214;244m template_name = \"bl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mog/blog_form.html\"\r\n\u001b[39m \u001b[2m139 \u001b[32;22m+\u001b[38;2;205;214;244m success_url = rever\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mse_lazy(\"blog_list\")\r\n\u001b[39m \u001b[2m140 \u001b[32;22m+\r\n\u001b[39m \u001b[2m141 \u001b[32;22m+\r\n\u001b[39m \u001b[2m142 \u001b[32;22m+\u001b[38;2;205;214;244mclass BlogDeleteView(De\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mleteView):\r\n\u001b[39m \u001b[2m143 \u001b[32;22m+\u001b[38;2;205;214;244m model = Blog\r\n\u001b[39m \u001b[2m144 \u001b[32;22m+\u001b[38;2;205;214;244m template_name = \"bl\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mog/blog_confirm_delete.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mhtml\"\r\n\u001b[39m \u001b[2m145 \u001b[32;22m+\u001b[38;2;205;214;244m success_url = rever\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mse_lazy(\"blog_list\")\r\n\u001b[0m \u001b[2m146 \u001b[0m \u001b[38;2;147;153;178m```\u001b[20X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m148 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mОтображение в шаблон\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22mе\r\n\u001b[39;48;5;52m \u001b[2m 79 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m{{ form.as_p }}\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — в\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m параграфах.\r\n\u001b[39;22m \u001b[2m 80 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m{{ form.as_table }}\u001b[38;2;147;153;178m`\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m — в строках таблицы.\r\n\u001b[39;22m \u001b[2m 81 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mРучное управление:\u001b[38;2;147;153;178;22m*\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m*\r\n\u001b[39;48;5;22;22m \u001b[2m149 \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{{ form.as_p }}\u001b[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<p>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m150 \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{{ form.as_table }}\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оки таблицы.\r\n\u001b[39m \u001b[2m151 \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но, когда важна HTML-ра\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзметка, CSS-классы или\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mотдельный вывод ошибок.\r\n\u001b[39m \u001b[2m152 \u001b[32;22m+\r\n\u001b[39m \u001b[2m153 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m154 \u001b[32;22m+\u001b[38;2;205;214;244m<form method=\"post\">\r\n\u001b[39m \u001b[2m155 \u001b[32;22m+\u001b[38;2;205;214;244m {% csrf_token %}\r\n\u001b[39m \u001b[2m156 \u001b[32;22m+\u001b[38;2;205;214;244m {{ form.as_p }}\r\n\u001b[39m \u001b[2m157 \u001b[32;22m+\u001b[38;2;205;214;244m <button type=\"submit\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m>Сохранить</button>\r\n\u001b[39m \u001b[2m158 \u001b[32;22m+\u001b[38;2;205;214;244m</form>\r\n\u001b[39m \u001b[2m159 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m160 \u001b[32;22m+\r\n\u001b[0m \u001b[2m161 \u001b[0m \u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\u001b[16X\r\n\u001b[39;48;5;22m \u001b[2m162 \u001b[32;22m+\u001b[38;2;205;214;244m<form method=\"post\">\u001b[3X\r\n\u001b[39m \u001b[2m163 \u001b[32;22m+\u001b[38;2;205;214;244m {% csrf_token %}\r\n\u001b[39m \u001b[2m164 \u001b[32;22m+\r\n\u001b[0m \u001b[2m165 \u001b[0m \u001b[38;2;205;214;244m{% for field in form %}\r\n\u001b[39;48;5;52m \u001b[2m 84 \u001b[31;22m-\u001b[38;2;205;214;244;2m {{ field.label_tag }}\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m {{ field }}\r\n\u001b[39;22m \u001b[2m 85 \u001b[31;22m-\u001b[38;2;205;214;244;2m {{ field.errors }}\r\n\u001b[39;48;5;22;22m \u001b[2m166 \u001b[32;22m+\u001b[38;2;205;214;244m <div>\u001b[14X\r\n\u001b[39m \u001b[2m167 \u001b[32;22m+\u001b[38;2;205;214;244m {{ field.label_ta\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mg }}\r\n\u001b[39m \u001b[2m168 \u001b[32;22m+\u001b[38;2;205;214;244m {{ field }}\r\n\u001b[39m \u001b[2m169 \u001b[32;22m+\u001b[38;2;205;214;244m {{ field.errors }\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m}\r\n\u001b[39m \u001b[2m170 \u001b[32;22m+\u001b[38;2;205;214;244m </div>\r\n\u001b[0m \u001b[2m171 \u001b[0m \u001b[38;2;205;214;244m{% endfor %}\u001b[11X\r\n\u001b[39;48;5;22m \u001b[2m172 \u001b[32;22m+\u001b[23X\r\n\u001b[39m \u001b[2m173 \u001b[32;22m+\u001b[38;2;205;214;244m <button type=\"submit\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m>Сохранить</button>\r\n\u001b[39m \u001b[2m174 \u001b[32;22m+\u001b[38;2;205;214;244m</form>\r\n\u001b[0m \u001b[2m175 \u001b[0m \u001b[38;2;147;153;178m```\u001b[20X\r\n\u001b[39;48;5;52m \u001b[2m 88 \u001b[31;22m-\u001b[38;2;147;153;178;2m*\u001b[38;2;243;139;168mВажно:\u001b[38;2;147;153;178m*\u001b[38;2;205;214;244m Не забывайте п\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mро \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m{% csrf_token %}\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m в\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mнутри тега \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<form>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;48;5;22;22m \u001b[2m176 \u001b[32;22m+\u001b[23X\r\n\u001b[39m \u001b[2m177 \u001b[32;22m+\u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mCSRF-токен\r\n\u001b[39m \u001b[2m178 \u001b[32;22m+\u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mCSRF (Cross-Site Requ\r\n\u001b[39;22m \u001b[2m \u001b[38;2;243;139;168;1;22mest Forgery)\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 при которой чужой сайт\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[2m179 \u001b[32;22m+\r\n\u001b[39m \u001b[2m180 \u001b[32;22m+\u001b[38;2;205;214;244mПример: пользователь за\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ении. Он открывает вред\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;244mPOST\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ъекта. Без защиты брауз\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 \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[2m181 \u001b[32;22m+\r\n\u001b[39m \u001b[2m182 \u001b[32;22m+\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m{% csrf_token %}\u001b[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[2m183 \u001b[32;22m+\r\n\u001b[39m \u001b[2m184 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m185 \u001b[32;22m+\u001b[38;2;205;214;244m<input type=\"hidden\" na\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mme=\"csrfmiddlewaretoken\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\" value=\"...\">\r\n\u001b[39m \u001b[2m186 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m187 \u001b[32;22m+\r\n\u001b[39m \u001b[2m188 \u001b[32;22m+\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 Django сверя\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[2m \u001b[38;2;205;214;244;22mяется.\r\n\u001b[39m \u001b[2m189 \u001b[32;22m+\r\n\u001b[39m \u001b[2m190 \u001b[32;22m+\u001b[38;2;205;214;244mКороткое правило: во вс\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе HTML-формы с \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mmethod=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"post\"\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m добавлять \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m{% c\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22msrf_token %}\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[0m\u001b[32X\r\n\u001b[2m────────────────────────────────\r\n\r\n• \u001b[0mТекст внесён. Проверяю итог и\r\n обновляю индекс под новый\r\n \u001b[36mtitle\u001b[0m/\u001b[36mstatus\u001b[0m.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Работа с\r\n\u001b[2m \u001b[0mформами и\r\n CUD.md\u001b[2m, \u001b[0mINDEX.md\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 99 System/INDEX.md (\u001b[32m+1\r\n\u001b[31m-2\u001b[0m)\r\n \u001b[2m525 \u001b[0m \u001b[38;2;205;214;244m| [[Django: Представлен\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mия, шаблоны и CBV]] | D\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mjango: Представления, ш\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mаблоны и CBV | processi\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mng | concept | [django,\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m routing, templates, cb\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mv, fbv] |\r\n\u001b[39;48;5;52m \u001b[2m526 \u001b[31;22m-\u001b[38;2;205;214;244;2m| [[Django: Работа с фо\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mрмами и CUD]] | Django:\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m Формы и CUD | seed | c\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244moncept | [django, forms\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m, crud, validation, mod\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244melform] |\r\n\u001b[39;48;5;22;22m \u001b[2m526 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Django: Работа с фо\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mрмами и CUD]] | Django:\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m Формы и CUD | processi\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mng | concept | [django,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m forms, crud, validatio\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mn, modelform] |\r\n\u001b[0m \u001b[2m527 \u001b[0m \u001b[38;2;205;214;244m| [[Python - MOC]] | Py\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mthon - MOC | seed | moc\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m | [programming, python\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m] |\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m769 \u001b[0m \u001b[38;2;205;214;244m| [[Travel Item]] | — |\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m seed | knowledge | [tr\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mavel] |\r\n\u001b[39;48;5;52m \u001b[2m770 \u001b[31;22m-\u001b[23X\r\n\u001b[0m\u001b[32X\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/\r\nPython/Django: Работа с формами\r\nи CUD.md (\u001b[32m+2\u001b[0m \u001b[31m-2\u001b[0m)\r\n \u001b[2m164\r\n\u001b[48;5;52;22m \u001b[2m165 \u001b[31;22m-\u001b[38;2;205;214;244;2m{% for field in form %}\r\n\u001b[39;48;5;22;22m \u001b[2m165 \u001b[32;22m+\u001b[38;2;205;214;244m {% for field in form\u001b[1X\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m%}\r\n\u001b[0m \u001b[2m166 \u001b[0m \u001b[38;2;205;214;244m \u001b[38;2;148;226;213m<\u001b[38;2;137;180;250mdiv\u001b[38;2;148;226;213m>\u001b[14X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m170 \u001b[0m \u001b[38;2;166;227;161m </div>\r\n\u001b[39;48;5;52m \u001b[2m171 \u001b[31;22m-\u001b[38;2;205;214;244;2m{% endfor %}\u001b[11X\r\n\u001b[39;48;5;22;22m \u001b[2m171 \u001b[32;22m+\u001b[38;2;205;214;244m {% endfor %}\u001b[9X\r\n\u001b[0m \u001b[2m172\u001b[25X\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Работа с\r\n\u001b[2m \u001b[0mформами и\r\n CUD.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 diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mstat\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLibrary/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mPython/Django: Работа с\r\n\u001b[39;2m │ … +2 lines\r\n └ .../Python/Django: Работа с\r\n … +5 lines (ctrl + t to view\r\n transcript)\r\n\u001b[0m \u001b[2minsertions(+), 31\r\n\u001b[0m \u001b[2mdeletions(-)\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;172mcheck\u001b[38;2;148;226;213m --\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mPython/Django: Работа с\r\n\u001b[39;2m │ … +2 lines\r\n └\r\n\r\n────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/\r\n\u001b[0m \u001b[36mPython/Django: Работа с\r\n\u001b[0m \u001b[36mформами и CUD.md:1\u001b[0m добавил\r\n простые пояснения про формы,\r\n \u001b[36mForm\u001b[0m/\u001b[36mModelForm\u001b[0m, жизненный цикл\r\n формы, валидацию, CBV для CUD\r\n и отображение в шаблоне.\r\n\r\n Отдельно добавил раздел \u001b[36mCSRF-\r\n\u001b[0m \u001b[36mтокен\u001b[0m: что это за атака, зачем\r\n нужен \u001b[36m{% csrf_token %}\u001b[0m, что он\r\n вставляет в HTML и когда его\r\n использовать. Статус заметки\r\n обновил на \u001b[36mprocessing\u001b[0m, индекс\r\n тоже поправил.\r\n\r\n\u001b[2m─ Worked for 2m 05s ────────────\r\n\r\n\u001b[48;5;238;22m\u001b[32X\r\n\u001b[1;2m \u001b[22;22m\"90 Library/Programming/Web/\r\n Основы HTML (структура,\r\n таблицы, формы).md\" распиши\r\n немного про теги и семантику\r\n\r\n\u001b[0m\u001b[32X\r\n\u001b[2m• \u001b[0mПлан: прочитаю заметку и\r\n текущую структуру раздела Web,\r\n затем добавлю короткий блок\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 Основы HTML (структура,\r\n таблицы, формы).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 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|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mHTML\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/INDEX.md'\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'90 Library/Programming/\r\n\u001b[39;2m │ … +1 lines\r\n └ 11 matches in 5F:\r\n … +32 lines (ctrl + t to\r\n view transcript)\r\n\u001b[0m \u001b[2m(структура, табли...\r\n\r\n\r\n────────────────────────────────\r\n\r\n• \u001b[0mВ заметке уже есть короткий\r\n раздел, но он больше\r\n перечисляет теги. Расширю его\r\n простыми пояснениями: что\r\n такое тег/атрибут, блочные и\r\n строчные элементы, зачем нужна\r\n семантика, и добавлю небольшой\r\n пример страницы.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/\r\nWeb/Основы HTML (структура,\r\nтаблицы, формы).md (\u001b[32m+79\u001b[0m \u001b[31m-3\u001b[0m)\r\n \u001b[2m 1 \u001b[0m \u001b[38;2;147;153;178m---\r\n\u001b[39;48;5;52m \u001b[2m 2 \u001b[31;22m-\u001b[38;2;205;214;244;2mstatus: seed\u001b[11X\r\n\u001b[39;48;5;22;22m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: processing\u001b[5X\r\n\u001b[0m \u001b[2m 3 \u001b[0m \u001b[38;2;205;214;244mtype: concept\u001b[10X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 11 \u001b[0m \u001b[38;2;205;214;244mupdated: 2026-05-30\r\n\u001b[39;48;5;22m \u001b[2m 12 \u001b[32;22m+\u001b[38;2;205;214;244mtitle: \"Основы HTML (ст\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[0m \u001b[2m 13 \u001b[0m \u001b[38;2;205;214;244msource:\u001b[16X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m 49 \u001b[0m \u001b[38;2;147;153;178m##\u001b[38;2;250;179;135m \u001b[38;2;148;226;213mОсновные теги и сема\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22mнтика\r\n\u001b[39;48;5;52m \u001b[2m 49 \u001b[31;22m-\u001b[38;2;205;214;244;2mHTML5 вводит семантичес\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mкие теги для улучшения\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mпонимания структуры пои\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mсковиками и программами\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m экранного доступа:\r\n\u001b[39;22m \u001b[2m 50 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<header>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<nav>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<main>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<section>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<article>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<aside>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<footer>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;48;5;22;22m \u001b[2m 50 \u001b[32;22m+\u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mТег\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тки, который говорит бр\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[2m 51 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 52 \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 53 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 54 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m 55 \u001b[32;22m+\u001b[38;2;205;214;244m<p>Текст абзаца</p>\r\n\u001b[39m \u001b[2m 56 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m 57 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 58 \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 59 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 60 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m 61 \u001b[32;22m+\u001b[38;2;205;214;244m<img src=\"cat.jpg\" alt=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"Кот\">\r\n\u001b[39m \u001b[2m 62 \u001b[32;22m+\u001b[38;2;205;214;244m<br>\r\n\u001b[39m \u001b[2m 63 \u001b[32;22m+\u001b[38;2;205;214;244m<input type=\"email\" nam\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22me=\"email\">\r\n\u001b[39m \u001b[2m 64 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m 65 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 66 \u001b[32;22m+\u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mАтрибуты\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оведение тега:\r\n\u001b[39m \u001b[2m 67 \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;244mhref\u001b[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 68 \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;244msrc\u001b[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 69 \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;244malt\u001b[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 70 \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;244mclass\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ля стилизации.\r\n\u001b[39m \u001b[2m 71 \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;244mid\u001b[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 72 \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;244mname\u001b[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 73 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 74 \u001b[32;22m+\u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mБлочные и строчные\r\n\u001b[39m \u001b[2m \u001b[38;2;148;226;213;22mэлементы\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;243;139;168;1mБлочные элементы\u001b[38;2;147;153;178;22m**\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзанимают всю доступную\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mширину и обычно начинаю\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтся с новой строки: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<d\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22miv>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<p>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<h1>\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;22msection>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<form>\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;243;139;168;1mСтрочные элементы\u001b[38;2;147;153;178;22m**\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m находятся внутри строк\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи текста и не ломают по\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mток: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<span>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \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, \u001b[38;2;147;153;178m`\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m<strong>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<em>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<co\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mde>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m 77 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 78 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m 79 \u001b[32;22m+\u001b[38;2;205;214;244m<p>\r\n\u001b[39m \u001b[2m 80 \u001b[32;22m+\u001b[38;2;205;214;244m Это абзац с <strong>в\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mажным текстом</strong>\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mи\r\n\u001b[39m \u001b[2m 81 \u001b[32;22m+\u001b[38;2;205;214;244m <a href=\"/about/\">ссы\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mлкой</a>.\r\n\u001b[39m \u001b[2m 82 \u001b[32;22m+\u001b[38;2;205;214;244m</p>\r\n\u001b[39m \u001b[2m 83 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m 84 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 85 \u001b[32;22m+\u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mСемантические теги\r\n\u001b[39m \u001b[2m 86 \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[2m 87 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 88 \u001b[32;22m+\u001b[38;2;205;214;244mНапример, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<main>\u001b[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<nav>\u001b[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<article>\u001b[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[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 89 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 90 \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<header>\u001b[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[2m 91 \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<nav>\u001b[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 92 \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<main>\u001b[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 93 \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<section>\u001b[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 94 \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<article>\u001b[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[2m 95 \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<aside>\u001b[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[2m 96 \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<footer>\u001b[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 97 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 98 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m 99 \u001b[32;22m+\u001b[38;2;205;214;244m<body>\r\n\u001b[39m \u001b[2m100 \u001b[32;22m+\u001b[38;2;205;214;244m <header>\r\n\u001b[39m \u001b[2m101 \u001b[32;22m+\u001b[38;2;205;214;244m <h1>Блог</h1>\r\n\u001b[39m \u001b[2m102 \u001b[32;22m+\u001b[38;2;205;214;244m <nav>\r\n\u001b[39m \u001b[2m103 \u001b[32;22m+\u001b[38;2;205;214;244m <a href=\"/\">Главн\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mая</a>\r\n\u001b[39m \u001b[2m104 \u001b[32;22m+\u001b[38;2;205;214;244m <a href=\"/about/\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m>О проекте</a>\r\n\u001b[39m \u001b[2m105 \u001b[32;22m+\u001b[38;2;205;214;244m </nav>\r\n\u001b[39m \u001b[2m106 \u001b[32;22m+\u001b[38;2;205;214;244m </header>\r\n\u001b[39m \u001b[2m107 \u001b[32;22m+\r\n\u001b[39m \u001b[2m108 \u001b[32;22m+\u001b[38;2;205;214;244m <main>\r\n\u001b[39m \u001b[2m109 \u001b[32;22m+\u001b[38;2;205;214;244m <article>\r\n\u001b[39m \u001b[2m110 \u001b[32;22m+\u001b[38;2;205;214;244m <h2>Что такое HTM\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mL</h2>\r\n\u001b[39m \u001b[2m111 \u001b[32;22m+\u001b[38;2;205;214;244m <p>HTML описывает\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.</p>\r\n\u001b[39m \u001b[2m112 \u001b[32;22m+\u001b[38;2;205;214;244m </article>\r\n\u001b[39m \u001b[2m113 \u001b[32;22m+\r\n\u001b[39m \u001b[2m114 \u001b[32;22m+\u001b[38;2;205;214;244m <aside>\r\n\u001b[39m \u001b[2m115 \u001b[32;22m+\u001b[38;2;205;214;244m <h2>Похожие матер\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mиалы</h2>\r\n\u001b[39m \u001b[2m116 \u001b[32;22m+\u001b[38;2;205;214;244m <a href=\"/css/\">О\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mсновы CSS</a>\r\n\u001b[39m \u001b[2m117 \u001b[32;22m+\u001b[38;2;205;214;244m </aside>\r\n\u001b[39m \u001b[2m118 \u001b[32;22m+\u001b[38;2;205;214;244m </main>\r\n\u001b[39m \u001b[2m119 \u001b[32;22m+\r\n\u001b[39m \u001b[2m120 \u001b[32;22m+\u001b[38;2;205;214;244m <footer>\r\n\u001b[39m \u001b[2m121 \u001b[32;22m+\u001b[38;2;205;214;244m <p>2026</p>\r\n\u001b[39m \u001b[2m122 \u001b[32;22m+\u001b[38;2;205;214;244m </footer>\r\n\u001b[39m \u001b[2m123 \u001b[32;22m+\u001b[38;2;205;214;244m</body>\r\n\u001b[39m \u001b[2m124 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[39m \u001b[2m125 \u001b[32;22m+\r\n\u001b[39m \u001b[2m126 \u001b[32;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<div>\u001b[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<di\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mv>\u001b[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[0m \u001b[2m127\u001b[25X\r\n\r\n────────────────────────────────\r\n\r\n• \u001b[0mТекст добавлен. Проверю\r\n фрагмент и обновлю индекс: у\r\n заметки изменился статус и\r\n появился явный \u001b[36mtitle\u001b[0m.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Основы HTML (структура,\r\n таблицы, формы).md\u001b[2m,\r\n\u001b[0m INDEX.md\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 99 System/INDEX.md (\u001b[32m+1\r\n\u001b[31m-1\u001b[0m)\r\n \u001b[2m557 \u001b[0m \u001b[38;2;205;214;244m| [[Основы Bootstrap]]\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m| Основы Bootstrap | se\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22med | concept | [bootstr\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22map, web-development, cs\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22ms-framework, grid-syste\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mm] |\r\n\u001b[39;48;5;52m \u001b[2m558 \u001b[31;22m-\u001b[38;2;205;214;244;2m| [[Основы HTML (структ\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mура, таблицы, формы)]]\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m| Основы HTML (структур\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mа, таблицы, формы) | se\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244med | concept | [html, w\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244meb-development, structu\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mre, tables, forms] |\r\n\u001b[39;48;5;22;22m \u001b[2m558 \u001b[32;22m+\u001b[38;2;205;214;244m| [[Основы HTML (структ\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| Основы HTML (структур\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа, таблицы, формы) | pr\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mocessing | concept | [h\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mtml, web-development, s\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mtructure, tables, forms\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m] |\r\n\u001b[0m \u001b[2m559 \u001b[0m \u001b[38;2;205;214;244m| [[Основы веб-разработ\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mки]] | Основы веб-разра\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mботки | seed | moc | [w\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22meb, html, css, bootstra\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mp] |\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 diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mcheck\u001b[38;2;148;226;213m --\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Основы HTML\r\n\u001b[39;2m │ … +3 lines\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 git diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mstat\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLibrary/Programming/Web/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mОсновы HTML (структура,\r\n\u001b[39;2m │ … +2 lines\r\n └ .../Web/Основы HTML\r\n … +6 lines (ctrl + t to view\r\n transcript)\r\n\u001b[0m \u001b[2minsertions(+), 4\r\n\u001b[0m \u001b[2mdeletions(-)\r\n\r\n────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/Web/\r\n\u001b[0m \u001b[36mОсновы HTML (структура,\r\n\u001b[0m \u001b[36mтаблицы, формы).md:40\u001b[0m расширил\r\n блок «Основные теги и\r\n семантика»:\r\n\r\n - что такое тег;\r\n \u001b[36mmain\u001b[0m, \u001b[36msection\u001b[0m, \u001b[36marticle\u001b[0m,\r\n \u001b[36maside\u001b[0m, \u001b[36mfooter\u001b[0m;\r\n\r\n - пример семантической\r\n структуры страницы.\r\n\r\n Также добавил \u001b[36mtitle\u001b[0m, перевёл\r\n статус в \u001b[36mprocessing\u001b[0m и обновил\r\n индекс.\r\n\r\n\u001b[2m────────────────────────────────\r\n\r\n\u001b[48;5;238;22m\u001b[32X\r\n\u001b[1;2m \u001b[22;22mРасиши ещё атрибуты валидации\r\n и элементы управления\r\n\r\n\u001b[0m\u001b[32X\r\n\u001b[2m• \u001b[0mПлан: расширю только раздел\r\n «Формы»: подробнее распишу\r\n элементы управления и атрибуты\r\n валидации, добавлю короткие\r\n HTML-примеры. Остальные части\r\n заметки не трогаю.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Основы HTML (структура,\r\n таблицы, формы).md\r\n\r\n\u001b[2m────────────────────────────────\r\n\r\n• \u001b[0mНашёл короткий список в конце\r\n заметки. Заменю его на\r\n пояснения по каждому элементу\r\n и каждому атрибуту валидации.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/\r\nWeb/Основы HTML (структура,\r\nтаблицы, формы).md (\u001b[32m+85\u001b[0m \u001b[31m-5\u001b[0m)\r\n \u001b[2m188 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mЭлементы управления\r\n\u001b[0m \u001b[2m \u001b[38;2;148;226;213;22m:\r\n\u001b[39;48;5;52m \u001b[2m189 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<input>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mtype=\"tex\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mt\"\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mpassword\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244memail\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mnumber\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mcheckbox\u001b[38;2;147;153;178m`\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mradio\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mfile\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mdat\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244me\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mhidden\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m190 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<select>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m + \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<option\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: выпадающий список.\r\n\u001b[39;22m \u001b[2m191 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<textarea>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: многост\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mрочный ввод текста.\r\n\u001b[39;22m \u001b[2m192 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<fieldset>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m + \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<lege\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mnd>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: группировка связа\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mнных полей.\r\n\u001b[39;48;5;22;22m \u001b[2m189 \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<input>\u001b[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;244mtype\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m190 \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<select>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m + \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<option\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[2m191 \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<textarea>\u001b[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[2m192 \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<button>\u001b[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[2m193 \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<fieldset>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m + \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<lege\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mnd>\u001b[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[2m194 \u001b[32;22m+\r\n\u001b[39m \u001b[2m195 \u001b[32;22m+\u001b[38;2;205;214;244mОсновные \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mtype\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m для \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m<i\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mnput>\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m:\r\n\u001b[39m \u001b[2m196 \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;244mtext\u001b[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[2m197 \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;244mpassword\u001b[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[2m198 \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;244memail\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — email; брау\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[2m199 \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;244mnumber\u001b[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[2m200 \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;244mcheckbox\u001b[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[2m201 \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;244mradio\u001b[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;244mname\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m202 \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;244mfile\u001b[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[2m203 \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;244mdate\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — выбор даты.\r\n\u001b[39m \u001b[2m204 \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;244mhidden\u001b[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[2m205 \u001b[32;22m+\r\n\u001b[39m \u001b[2m206 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m207 \u001b[32;22m+\u001b[38;2;205;214;244m<label for=\"email\">Emai\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22ml:</label>\r\n\u001b[39m \u001b[2m208 \u001b[32;22m+\u001b[38;2;205;214;244m<input type=\"email\" id=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"email\" name=\"email\" re\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mquired>\r\n\u001b[39m \u001b[2m209 \u001b[32;22m+\r\n\u001b[39m \u001b[2m210 \u001b[32;22m+\u001b[38;2;205;214;244m<label for=\"age\">Возрас\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mт:</label>\r\n\u001b[39m \u001b[2m211 \u001b[32;22m+\u001b[38;2;205;214;244m<input type=\"number\" id\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=\"age\" name=\"age\" min=\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m18\" max=\"99\">\r\n\u001b[39m \u001b[2m212 \u001b[32;22m+\r\n\u001b[39m \u001b[2m213 \u001b[32;22m+\u001b[38;2;205;214;244m<label>\r\n\u001b[39m \u001b[2m214 \u001b[32;22m+\u001b[38;2;205;214;244m <input type=\"checkbox\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\" name=\"agreement\" requ\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mired>\r\n\u001b[39m \u001b[2m215 \u001b[32;22m+\u001b[38;2;205;214;244m Согласен с условиями\r\n\u001b[39m \u001b[2m216 \u001b[32;22m+\u001b[38;2;205;214;244m</label>\r\n\u001b[39m \u001b[2m217 \u001b[32;22m+\r\n\u001b[39m \u001b[2m218 \u001b[32;22m+\u001b[38;2;205;214;244m<fieldset>\r\n\u001b[39m \u001b[2m219 \u001b[32;22m+\u001b[38;2;205;214;244m <legend>Способ связи<\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/legend>\r\n\u001b[39m \u001b[2m220 \u001b[32;22m+\r\n\u001b[39m \u001b[2m221 \u001b[32;22m+\u001b[38;2;205;214;244m <label>\r\n\u001b[39m \u001b[2m222 \u001b[32;22m+\u001b[38;2;205;214;244m <input type=\"radio\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m name=\"contact_method\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mvalue=\"email\">\r\n\u001b[39m \u001b[2m223 \u001b[32;22m+\u001b[38;2;205;214;244m Email\r\n\u001b[39m \u001b[2m224 \u001b[32;22m+\u001b[38;2;205;214;244m </label>\r\n\u001b[39m \u001b[2m225 \u001b[32;22m+\r\n\u001b[39m \u001b[2m226 \u001b[32;22m+\u001b[38;2;205;214;244m <label>\r\n\u001b[39m \u001b[2m227 \u001b[32;22m+\u001b[38;2;205;214;244m <input type=\"radio\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m name=\"contact_method\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mvalue=\"phone\">\r\n\u001b[39m \u001b[2m228 \u001b[32;22m+\u001b[38;2;205;214;244m Телефон\r\n\u001b[39m \u001b[2m229 \u001b[32;22m+\u001b[38;2;205;214;244m </label>\r\n\u001b[39m \u001b[2m230 \u001b[32;22m+\u001b[38;2;205;214;244m</fieldset>\r\n\u001b[39m \u001b[2m231 \u001b[32;22m+\r\n\u001b[39m \u001b[2m232 \u001b[32;22m+\u001b[38;2;205;214;244m<label for=\"city\">Город\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m:</label>\r\n\u001b[39m \u001b[2m233 \u001b[32;22m+\u001b[38;2;205;214;244m<select id=\"city\" name=\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\"city\">\r\n\u001b[39m \u001b[2m234 \u001b[32;22m+\u001b[38;2;205;214;244m <option value=\"moscow\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m\">Москва</option>\r\n\u001b[39m \u001b[2m235 \u001b[32;22m+\u001b[38;2;205;214;244m <option value=\"spb\">С\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mанкт-Петербург</option>\r\n\u001b[39m \u001b[2m236 \u001b[32;22m+\u001b[38;2;205;214;244m</select>\r\n\u001b[39m \u001b[2m237 \u001b[32;22m+\r\n\u001b[39m \u001b[2m238 \u001b[32;22m+\u001b[38;2;205;214;244m<label for=\"comment\">Ко\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mмментарий:</label>\r\n\u001b[39m \u001b[2m239 \u001b[32;22m+\u001b[38;2;205;214;244m<textarea id=\"comment\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mname=\"comment\" rows=\"5\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m></textarea>\r\n\u001b[39m \u001b[2m240 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[0m \u001b[2m241\u001b[25X\r\n\u001b[0m \u001b[2m242 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mАтрибуты валидации:\r\n\u001b[39;48;5;52m \u001b[2m195 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mrequired\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mminlengt\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mh\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mmaxlength\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mmin\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mmax\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mpattern\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (регу\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mлярные выражения).\r\n\u001b[39;48;5;22;22m \u001b[2m243 \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;244mrequired\u001b[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[2m244 \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;244mminlength\u001b[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[2m245 \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;244mmaxlength\u001b[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[2m246 \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;244mmin\u001b[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[2m247 \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;244mmax\u001b[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[2m248 \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;244mpattern\u001b[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[2m249 \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;244mtype=\"email\"\u001b[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, похожий на email.\r\n\u001b[39m \u001b[2m250 \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;244mtype=\"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яет, что введён URL.\r\n\u001b[39m \u001b[2m251 \u001b[32;22m+\r\n\u001b[39m \u001b[2m252 \u001b[32;22m+\u001b[38;2;205;214;244mHTML-валидация работает\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[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[2m253 \u001b[32;22m+\r\n\u001b[39m \u001b[2m254 \u001b[32;22m+\u001b[38;2;147;153;178m```\u001b[38;2;205;214;244mhtml\r\n\u001b[39m \u001b[2m255 \u001b[32;22m+\u001b[38;2;205;214;244m<form action=\"/register\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m/\" method=\"post\">\r\n\u001b[39m \u001b[2m256 \u001b[32;22m+\u001b[38;2;205;214;244m <label for=\"username\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m>Логин:</label>\r\n\u001b[39m \u001b[2m257 \u001b[32;22m+\u001b[38;2;205;214;244m <input\r\n\u001b[39m \u001b[2m262 \u001b[32;22m+\u001b[38;2;205;214;244m minlength=\"3\"\r\n\u001b[39m \u001b[2m263 \u001b[32;22m+\u001b[38;2;205;214;244m maxlength=\"20\"\r\n\u001b[39m \u001b[2m264 \u001b[32;22m+\u001b[38;2;205;214;244m pattern=\"[a-zA-Z0-9\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m_]+\"\r\n\u001b[39m \u001b[2m265 \u001b[32;22m+\u001b[38;2;205;214;244m >\r\n\u001b[39m \u001b[2m266 \u001b[32;22m+\r\n\u001b[39m \u001b[2m267 \u001b[32;22m+\u001b[38;2;205;214;244m <label for=\"email\">Em\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mail:</label>\r\n\u001b[39m \u001b[2m268 \u001b[32;22m+\u001b[38;2;205;214;244m <input type=\"email\" i\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22md=\"email\" name=\"email\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mrequired>\r\n\u001b[39m \u001b[2m269 \u001b[32;22m+\r\n\u001b[39m \u001b[2m270 \u001b[32;22m+\u001b[38;2;205;214;244m <label for=\"age\">Возр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mаст:</label>\r\n\u001b[39m \u001b[2m271 \u001b[32;22m+\u001b[38;2;205;214;244m <input type=\"number\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mid=\"age\" name=\"age\" min\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m=\"18\" max=\"99\">\r\n\u001b[39m \u001b[2m272 \u001b[32;22m+\r\n\u001b[39m \u001b[2m273 \u001b[32;22m+\u001b[38;2;205;214;244m <button type=\"submit\"\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m>Зарегистрироваться</bu\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mtton>\r\n\u001b[39m \u001b[2m274 \u001b[32;22m+\u001b[38;2;205;214;244m</form>\r\n\u001b[39m \u001b[2m275 \u001b[32;22m+\u001b[38;2;147;153;178m```\r\n\u001b[0m\u001b[32X\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Основы HTML (структура,\r\n таблицы, формы).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 diff\u001b[38;2;147;153;178m --\u001b[38;2;235;160;172mcheck\u001b[38;2;148;226;213m --\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22m'90 Library/Programming/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mWeb/Основы HTML\r\n\u001b[39;2m │ … +2 lines\r\n └\r\n\r\n────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/Web/\r\n\u001b[0m \u001b[36mОсновы HTML (структура,\r\n\u001b[0m \u001b[36mтаблицы, формы).md:190\r\n\u001b[0m расширил:\r\n\r\n - элементы управления форм:\r\n \u001b[36minput\u001b[0m, \u001b[36mselect\u001b[0m, \u001b[36mtextarea\u001b[0m,\r\n \u001b[36mbutton\u001b[0m, \u001b[36mfieldset\u001b[0m;\r\n\r\n - основные \u001b[36minput type\u001b[0m: \u001b[36mtext\u001b[0m,\r\n \u001b[36mpassword\u001b[0m, \u001b[36memail\u001b[0m, \u001b[36mnumber\u001b[0m,\r\n \u001b[36mcheckbox\u001b[0m, \u001b[36mradio\u001b[0m, \u001b[36mfile\u001b[0m, \u001b[36mdate\u001b[0m,\r\n \u001b[36mhidden\u001b[0m;\r\n\r\n - атрибуты валидации:\r\n \u001b[36mrequired\u001b[0m, \u001b[36mminlength\u001b[0m,\r\n \u001b[36mmaxlength\u001b[0m, \u001b[36mmin\u001b[0m, \u001b[36mmax\u001b[0m,\r\n \u001b[36mpattern\u001b[0m, \u001b[36memail\u001b[0m, \u001b[36murl\u001b[0m;\r\n\r\n - добавил HTML-примеры.\r\n\r\n\u001b[2m────────────────────────────────\r\n\r\n\u001b[48;5;238;22m \u001b[31X\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 medium\u001b[39;2m · \u001b[38;2;171;223;167;22m~/Documents/…\u001b[2A\u001b[30D\u001b[0m",
"rows": 34,
"scrollLine": -1
}
}
},
"pinned": true,
"icon": "terminal",
"title": "Terminal: SecondBrain"
}
},
{
"id": "394fb6e28d09b8f3",
"type": "leaf",
"state": {
"type": "all-properties",
"state": {
"sortOrder": "frequency",
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-archive",
"title": "All properties"
}
},
{
"id": "e51be669e29cd994",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks for Основы HTML (структура, таблицы, формы)"
}
},
{
"id": "86ea4ddeaafff092",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "90 Library/Programming/Ruby On Rails/Sidekiq - основа работы.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links from Sidekiq - основа работы"
}
},
{
"id": "a0ffd3bace615787",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "90 Library/Programming/Web/CSS: Адаптивность, Flexbox и Grid.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline of CSS: Адаптивность, Flexbox и Grid"
}
}
]
}
],
"direction": "horizontal",
"width": 339
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"markdown-importer:Open format converter": false,
"random-note:Open random note": false,
"audio-recorder:Start/stop recording": false,
"bases:Create new base": false,
"omnisearch:Omnisearch": false,
"templater-obsidian:Templater": false,
"obsidian-git:Open Git source control": false,
"obsidian-excalidraw-plugin:New drawing": false,
"terminal:Open terminal": false
}
},
"active": "28d74d490ab22900",
"lastOpenFiles": [
"90 Library/Programming/Web/CSS: Основы, селекторы и блочная модель.md",
"90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
"90 Library/Programming/Web/Основы Bootstrap.md",
"90 Library/Programming/Web/Основы веб-разработки.md",
"90 Library/Sport/Креатин.md",
"90 Library/Programming/Python/Python: Базовый синтаксис и основы.md",
"90 Library/Programming/Python/Python - MOC.md",
"90 Library/Programming/Python/Django: Работа с формами и CUD.md",
"90 Library/Programming/Python/Django: Представления, шаблоны и CBV.md",
"update_index.py",
"migrate_titles.py",
"90 Library/Programming/Python/Django: Модели и ORM.md",
"90 Library/Programming/Python/Курс по Python и Django.md",
"90 Library/Programming/Web/CSS: Адаптивность, Flexbox и Grid.md",
"AGENTS.md",
"CODEX.md",
"GEMINI.md",
"CLAUDE.md",
"90 Library/Finance/Инвестиции/Антихрупкость как управляемая асимметрия.md",
"90 Library/Finance/Инвестиции/Антихрупкость.md",
"90 Library/Finance/Инвестиции/Заметки в инвестировании.md",
"99 System/Archive/04 Tools/🛠️ Неоконченные заметки.md",
"99 System/Archive/04 Tools/StudyTracker/StudyTracker.md",
"99 System/Archive/04 Tools/StudyTracker/Books/Books.md",
"99 System/Archive/04 Tools/StudyTracker/Courses/Courses.md",
"90 Library/Networking/Основы сетевых технологий.md",
"90 Library/Machine Learning/Data Science с нуля.md",
"90 Library/DevOps/Курс по DevOps от Merion.md",
"99 System/Archive/04 Tools/StudyTracker/Courses",
"99 System/Archive/04 Tools/StudyTracker/Books",
"99 System/Archive/04 Tools/StudyTracker",
"99 System/Archive/04 Tools",
"99 System/Archive/SocialBase/04 Другие",
"99 System/Archive/SocialBase/03 Коллеги",
"99 System/Archive/SocialBase/02 Друзья",
"99 System/Archive/SocialBase/01 Семья",
"99 System/Cache/Pasted image 20260526204029.png",
"99 System/Cache/Pasted image 20260526203848.png",
"99 System/Cache/Pasted image 20260526203807.png",
"99 System/Cache/Pasted image 20260521134256.png",
"99 System/Cache/Pasted image 20260521134238.png",
"99 System/Cache/Pasted image 20260521134228.png",
"99 System/Cache/Pasted image 20260521134207.png",
"99 System/Cache/Pasted image 20260521133832.png",
"99 System/Cache/Pasted image 20260521133824.png",
"99 System/Cache/Pasted image 20260521133344.png",
"00 Inbox/Untitled.canvas"
]
}