diff --git a/astro.config.mjs b/astro.config.mjs
index f6b2d61..fc2e85d 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -10,6 +10,7 @@ export default defineConfig({
starlight({
title: 'Практическое введение в веб-картографию',
description: 'Веб-картография и веб-картографирование: практическое пособие',
+ favicon: '/icon.png',
head: [
{
tag: 'script',
@@ -18,6 +19,14 @@ export default defineConfig({
'data-goatcounter': "https://webcartography.goatcounter.com/count",
async: true
}
+ },
+ {
+ tag: 'link',
+ attrs: {
+ rel: 'icon',
+ href: '/favicon.ico',
+ sizes: '32x32',
+ },
}
],
locales: {
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..c73e523
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..af8ab0f
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/favicon.svg b/public/favicon.svg
deleted file mode 100644
index cba5ac1..0000000
--- a/public/favicon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/icon-192.png b/public/icon-192.png
new file mode 100644
index 0000000..fc72a22
Binary files /dev/null and b/public/icon-192.png differ
diff --git a/public/icon-512.png b/public/icon-512.png
new file mode 100644
index 0000000..3586ebb
Binary files /dev/null and b/public/icon-512.png differ
diff --git a/public/icon.png b/public/icon.png
new file mode 100644
index 0000000..fa44218
Binary files /dev/null and b/public/icon.png differ
diff --git a/public/tableau.png b/public/tableau.png
new file mode 100644
index 0000000..a517cab
Binary files /dev/null and b/public/tableau.png differ
diff --git a/src/content/docs/3-api.mdx b/src/content/docs/3-api.mdx
index 4620256..9cc13e8 100644
--- a/src/content/docs/3-api.mdx
+++ b/src/content/docs/3-api.mdx
@@ -3,7 +3,6 @@ title: API
---
import { Card, FileTree, LinkCard, TabItem, Tabs } from '@astrojs/starlight/components';
-import Question from '../../components/Question.astro';
import MultipleChoice from '../../components/MultipleChoice.astro';
import Option from '../../components/Option.astro';
diff --git a/src/content/docs/4-backend.mdx b/src/content/docs/4-backend.mdx
index 6af7b61..e10e8a8 100644
--- a/src/content/docs/4-backend.mdx
+++ b/src/content/docs/4-backend.mdx
@@ -4,6 +4,8 @@ draft: true
---
import { Card, FileTree, LinkCard, TabItem, Tabs } from '@astrojs/starlight/components';
+import MultipleChoice from '../../components/MultipleChoice.astro';
+import Option from '../../components/Option.astro';
В этой главе мы рассмотрим
@@ -16,13 +18,27 @@ import { Card, FileTree, LinkCard, TabItem, Tabs } from '@astrojs/starlight/comp
## Бэкенд
-Мы уже знаем, что веб-приложения можно разделить на клиентскую и серверную части. Разработку клиентской части называют фронтендом. Разработку серверной части называют бэкендом. Фронтенд общается с бэкендом через API. Бэкенд предоставляет метода API, а фронтенд к ним обращается.
+Мы уже знаем, что веб-приложения можно разделить на клиентскую и серверную части. Разработку клиентской части называют фронтендом. Разработку серверной части называют бэкендом. Фронтенд общается с бэкендом через API. Бэкенд предоставляет методы API, а фронтенд к ним обращается.

Когда происходит вызов метода API -- запрос определённого URL -- выполняется соответствующая серверная функция. Для программирования серверных функций могут использоваться различные языки программирования Python, Go, Rust и даже JavaScript (NodeJS).
-В предыдущем занятии мы обращались к бэкенду через API, а в этот раз разработаем бэкенд сами. Наш бэкенд мы разработаем на языке Python с использованием библиотеки Flask.
+
+
+
+
+
+
+
+
+В предыдущем упражнении мы обращались к бэкенду через готовый API, а в этот раз разработаем бэкенд сами. Наш бэкенд мы разработаем на языке Python с использованием библиотеки Flask.
## Подготовка
@@ -158,7 +174,7 @@ def city_by_id(id):
### Подключение данных и CORS
-Наш бэкенд возвращает данные в формате GeoJSON, поэтому мы можем сразу подключить их в нашу карту.
+Наш бэкенд возвращает данные в формате GeoJSON, поэтому мы можем сразу подключить их в нашу карту. Однако на карте мы не увидим искомых городов. Чтобы узнать почему, проверим вкладку "Сеть" в инструментах разработчика. У запроса к списку городов мы увидим надпись **Ошибка CORS**.
```js title=main.js
map.on("load", () => {
@@ -199,8 +215,6 @@ map.on("load", () => {
})
```
-Однако на карте мы не увидим искомых городов. Чтобы узнать почему, проверим вкладку "Сеть" в инструментах разработчика. У запроса к списку городов мы увидим надпись **Ошибка CORS**.
-
Механизм CORS -- Cross-Origin Resource Sharing -- призван повысить безопасность веб-страницы. Нам, чтобы избежать ошибки CORS, надо указать, что API может отвечать на запросы любых веб-страниц.
> CORS -- это история про *веб-страницы*, поэтому выполняя запросы к API напрямую мы с ней не сталкивались.
@@ -230,7 +244,7 @@ def city_by_id(id):
return r
```
-После добавления заголовков о том, что API может обслуживать любые веб-страницы, в ответ мы получаем наш список городов в формате GeoJSON.
+После добавления заголовков о том, что API готов отдавать данные на любые веб-страницы, в ответ мы получаем наш список городов в формате GeoJSON, который выводится на карту.
### Выбор года
@@ -294,7 +308,7 @@ map.on("load", () => {