Как создать веб-приложение на Python без использования фреймворков

Ответ

Создать веб-приложение на Python без фреймворков можно с помощью модулей из стандартной библиотеки. Это полезно для понимания основ работы веба, но не рекомендуется для production-систем из-за отсутствия многих удобств и средств защиты. Существует несколько подходов разного уровня абстракции: 1. **`http.server` (Высокоуровневый)**: Простой способ запустить HTTP-сервер. Подходит для простых обработчиков и прототипов. ```python from http.server import BaseHTTPRequestHandler, HTTPServer class SimpleHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b"

Привет, мир!

") def run(server_class=HTTPServer, handler_class=SimpleHandler, port=8000): server_address = ('', port) httpd = server_class(server_address, handler_class) print(f"Сервер запущен на порту {port}") httpd.serve_forever() run() ``` 2. **`wsgiref` (Стандартный интерфейс)**: Реализация стандарта WSGI (Web Server Gateway Interface), который разделяет сервер и приложение. Это основа большинства Python-фреймворков. ```python from wsgiref.simple_server import make_server # WSGI-приложение def application(environ, start_response): status = '200 OK' headers = [('Content-type', 'text/plain; charset=utf-8')] start_response(status, headers) return [b"Hello, WSGI World!"] with make_server('', 8000, application) as httpd: print("Сервер запущен на порту 8000...") httpd.serve_forever() ``` 3. **`socket` (Низкоуровневый)**: Прямая работа с сокетами. Дает полный контроль, но требует ручной реализации всего HTTP-протокола. ```python import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8080)) server_socket.listen(1) print("Сервер слушает порт 8080...") while True: conn, addr = server_socket.accept() request = conn.recv(1024) # Упрощенный ответ, не парсим запрос response = b"HTTP/1.1 200 OKrnContent-Length: 13rnrnHello, Socket!" conn.sendall(response) conn.close() ``` **Вывод**: Использование стандартных библиотек — отличный способ изучить, как веб-серверы работают «под капотом», но для реальных проектов фреймворки (FastAPI, Django, Flask) предоставляют необходимую структуру, безопасность и инструменты для быстрой разработки.

Ответ 18+ 🔞

Да ты посмотри, какие тут, блядь, варианты развернулись! Прямо как в магазине, нахуй: от дешёвого разливного пива до коньяка в хрустале. Хочешь понять, как эта штука под капотом работает? Ну тогда давай, разберём, что у нас в стандартной библиотеке валяется, пока не пришли эти ваши фреймворки со своими удобствами и защитами, блядь. **Первый вариант — `http.server`. Это как на велосипеде с колёсиками, ёпта.** Ну то есть, для взрослого проекта — пиздец, конечно, но чтобы понять, откуда ноги растут — самое то. Запустил — и у тебя уже сервер пыхтит. ```python from http.server import BaseHTTPRequestHandler, HTTPServer class SimpleHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b"

Привет, мир!

") def run(server_class=HTTPServer, handler_class=SimpleHandler, port=8000): server_address = ('', port) httpd = server_class(server_address, handler_class) print(f"Сервер запущен на порту {port}") httpd.serve_forever() run() ``` Вот смотри, тут всё просто, как три копейки. Написал класс-обработчик, который на `GET` запрос отвечает «Привет, мир!». Запустил функцию — и сиди, довольный, смотри, как в браузере твоя надпись красуется. Но если ты думаешь, что на этом можно что-то серьёзное построить — охуеть, наивный. Это для учебных целей, блядь, и точка. **Второй вариант — `wsgiref`. Это уже посерьёзнее, типа как снять колёсики с велосипеда.** Тут уже появляется этот ваш, блядь, WSGI — такой стандартный протокол, на котором все большие дядьки-фреймворки и танцуют. Суть в чём? Сервер отдельно, твоё приложение отдельно. Красота! ```python from wsgiref.simple_server import make_server # WSGI-приложение def application(environ, start_response): status = '200 OK' headers = [('Content-type', 'text/plain; charset=utf-8')] start_response(status, headers) return [b"Hello, WSGI World!"] with make_server('', 8000, application) as httpd: print("Сервер запущен на порту 8000...") httpd.serve_forever() ``` Видишь? Функция `application` — это и есть твоё приложение. Ей скармливают окружение (`environ`) и колбэк для старта ответа. Ты говоришь «всё окей», отдаёшь заголовки и возвращаешь тело. Всё, блядь, элегантно и по стандарту. Уже пахнет чем-то настоящим, хотя до удобств Flask'а ещё, как до Луны. **Третий вариант — `socket`. А вот это, сука, уже полный дауншифтинг, вротберунчик.** Ты опускаешься на самый низкий уровень. Никакого HTTP тебе тут не подадут, всё сам, своими руками, как первобытный человек, который добывает огонь трением. Хочешь заголовки парсить? Парсь. Хочешь куки? Изобретай велосипед. Зато контроль — полный, блядь. ```python import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8080)) server_socket.listen(1) print("Сервер слушает порт 8080...") while True: conn, addr = server_socket.accept() request = conn.recv(1024) # Упрощенный ответ, не парсим запрос response = b"HTTP/1.1 200 OKrnContent-Length: 13rnrnHello, Socket!" conn.sendall(response) conn.close() ``` Смотри, что тут происходит: создали сокет, привязали к порту, слушаем. Прилетает соединение — мы ему в ответ плюём заранее заготовленную строку с HTTP-ответом и закрываемся. Никакого разбора запроса, никакой маршрутизации — просто плюнули и забыли. Для продакшена? Да ты что, охуел? Это чисто академический интерес, чтобы понять, откуда вся эта магия берётся. **Итог, блядь, какой?** Поковыряться со стандартной библиотекой — это, ебать, лучший способ прокачать скилл и перестать быть просто юзером фреймворков. Ты поймёшь, что там, под капотом у Flask или FastAPI, творится. Но! Как только ты это понял — беги, сука, обратно к этим самым фреймворкам. Потому что они дают тебе структуру, безопасность (а то сам какую-нибудь дыру накосячишь) и скорость разработки, которой тут, в этих ручных поделках, просто нихуя нет. Это как научиться высекать огонь кремнем, а потом спокойно пользоваться зажигалкой. Мудро, да?