Клиент-серверная архитектура
Веб работает по модели клиент-сервер:
- Клиент — обычно браузер (Chrome, Firefox), который отправляет запросы.
- Сервер — программа, которая принимает запросы, обрабатывает их и возвращает ответы.
Между клиентом и сервером обмен происходит по протоколу HTTP (или защищённому HTTPS).
Протокол HTTP
HTTP (HyperText Transfer Protocol) — это набор правил, по которым клиент и сервер обмениваются данными в интернете. HTTP работает по принципу «запрос-ответ»: клиент отправляет запрос, сервер обрабатывает его и возвращает ответ.
HTTP-запрос (Request)
Запрос состоит из нескольких частей:
- Метод (Method): GET (получить данные), POST (отправить данные), PUT, PATCH, DELETE и др.
- URL: адрес ресурса, к которому обращаемся (например,
/или/user/ivan). - Заголовки (Headers): служебная информация — тип браузера, язык, тип принимаемых данных.
- Тело (Body): данные, которые отправляются на сервер (используется в POST, PUT, PATCH).
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: ru-RU
Connection: keep-alive
Разбор:
GET— метод: «получи мне страницу»./— URL: корень сайта.HTTP/1.1— версия протокола.Host— доменное имя сервера.User-Agent— информация о браузере клиента.
HTTP-ответ (Response)
Ответ сервера тоже состоит из частей:
- Статус-код (Status Code): 200 (OK), 404 (Not Found), 500 (Server Error) и др.
- Заголовки (Headers): тип содержимого, дата, размер ответа.
- Тело (Body): HTML-страница, JSON-данные, изображение и т.д.
HTTP/1.1 200 OK
Date: Mon, 23 May 2022 22:38:34 GMT
Server: Apache/2.4.1
Content-Type: text/html
Content-Length: 1234
Connection: closed
<html>
<head><title>Example Domain</title></head>
<body><h1>Hello, World!</h1></body>
</html>
Разбор:
200 OK— запрос выполнен успешно.Content-Type: text/html— сервер возвращает HTML-страницу.Content-Length— размер ответа в байтах.
200 OK— всё хорошо301/302— перенаправление400 Bad Request— ошибка в запросе клиента404 Not Found— ресурс не найден500 Internal Server Error— ошибка на сервере
HTTPS
HTTPS (HyperText Transfer Protocol Secure) — это HTTP с добавлением шифрования через протоколы SSL/TLS. HTTPS защищает данные от перехвата: пароли, токены, личная информация передаются в зашифрованном виде.
- SSL (Secure Sockets Layer) — устаревший протокол.
- TLS (Transport Layer Security) — современный протокол, пришёл на смену SSL.
В практике термин «SSL-сертификат» до сих пор используется, хотя технически это уже TLS.
Flask vs Django
Два главных фреймворка для веб-разработки на Python:
| Критерий | Flask | Django |
|---|---|---|
| Тип | Микрофреймворк | Полнофункциональный фреймворк |
| «Из коробки» | Маршрутизация, шаблоны, сессии | ORM, админка, аутентификация, формы |
| Гибкость | Высокая: вы сами выбираете библиотеки | Ниже: «Django way» — одна правильная дорога |
| Сложность входа | Низкая: 5 строк — рабочее приложение | Выше: нужно понимать структуру проекта |
| Когда выбирать | API, микросервисы, прототипы, обучение | Крупные проекты, админка, сложная логика |
Flask: философия «сделай сам»
Flask даёт минимум и не мешает выбирать инструменты. Нужна ORM? Подключите SQLAlchemy. Нужна валидация? Возьмите Pydantic. Нужна админка? Есть Flask-Admin. Вы свободны комбинировать.
Django: философия «батарейки в комплекте»
Django поставляется с ORM, системой аутентификации, админ-панелью, формами, системой миграций. Это ускоряет разработку, но требует следовать «пути Django».
Первое Flask-приложение: как это работает
Flask-приложение строится вокруг объекта Flask. Декоратор @app.route() связывает URL с функцией-обработчиком (view function). Когда клиент запрашивает этот URL, Flask вызывает соответствующую функцию и возвращает её результат клиенту.
from flask import Flask
app = Flask(__name__) # создаём экземпляр приложения
@app.route('/') # связываем URL '/' с функцией
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True) # запускаем сервер разработки
По шагам:
Flask(__name__)создаёт приложение.__name__помогает Flask найти ресурсы (шаблоны, статику) относительно текущего файла.@app.route('/')— декоратор, который говорит: «когда кто-то откроет корень сайта, вызови функциюhello».return 'Hello, Flask!'— функция возвращает строку, которую Flask отправит клиенту как HTTP-ответ сContent-Type: text/html.app.run(debug=True)— запускает встроенный сервер разработки.debug=Trueвключает подробные ошибки и автообновление при изменении кода.