📖 Теория: Введение в веб-разработку и Flask

⚡ Кратко

HTTP — протокол передачи гипертекста. Клиент отправляет Request (метод, URL, заголовки, тело), сервер отвечает Response (статус, заголовки, тело). HTTPS = HTTP + шифрование SSL/TLS.

Flask — микрофреймворк: минимум из коробки, максимум гибкости. Django — полный фреймворк: ORM, админка, аутентификация из коробки.

  • Выбирай Flask для API, микросервисов, прототипов, обучения.
  • Выбирай Django для крупных проектов со встроенной админкой и сложной бизнес-логикой.

Клиент-серверная архитектура

Веб работает по модели клиент-сервер:

  • Клиент — обычно браузер (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:

КритерийFlaskDjango
ТипМикрофреймворкПолнофункциональный фреймворк
«Из коробки»Маршрутизация, шаблоны, сессииORM, админка, аутентификация, формы
ГибкостьВысокая: вы сами выбираете библиотекиНиже: «Django way» — одна правильная дорога
Сложность входаНизкая: 5 строк — рабочее приложениеВыше: нужно понимать структуру проекта
Когда выбиратьAPI, микросервисы, прототипы, обучениеКрупные проекты, админка, сложная логика
⚠️ Важно: Flask и Django — не конкуренты, а инструменты для разных задач. Многие компании используют и то, и другое: Django для основного сайта, Flask для микросервисов и 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)  # запускаем сервер разработки

По шагам:

  1. Flask(__name__) создаёт приложение. __name__ помогает Flask найти ресурсы (шаблоны, статику) относительно текущего файла.
  2. @app.route('/') — декоратор, который говорит: «когда кто-то откроет корень сайта, вызови функцию hello».
  3. return 'Hello, Flask!' — функция возвращает строку, которую Flask отправит клиенту как HTTP-ответ с Content-Type: text/html.
  4. app.run(debug=True) — запускает встроенный сервер разработки. debug=True включает подробные ошибки и автообновление при изменении кода.