294 lines
108 KiB
JSON
294 lines
108 KiB
JSON
{
|
||
"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"
|
||
]
|
||
} |