Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

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

ПрограммированиеData science+3
Анонимный вопрос
Data Science
  · 14,1 K
Веб-разработчик, геймер, специалист по этике  · 24 мая 2022
Открываю тайны мироздания: абсолютно любой веб-сайт технически - это программа, которая умеет принимать HTTP запросы и возвращать в ответ на них какие-то данные (в HTTP ответ завёрнутые). На этом всё. Я серьёзно.
Поэтому на верхнем уровне разработка сайта на питоне без использования веб-фреймворков выглядит точно так же, как с их использованием: вы пишете код для каждого маршрута, предполагаемого на вашем сайте, а при развёртывании запускаете программу веб-сервера, которая будет слушать HTTP запросы. Ну или даже HTTPS ещё сразу запилите 😏. Этот процесс будет одинаков, какой бы язык вы ни выбрали, питон, пыхпых, плюсы, шарп, жабу, хаскелл, лисп, пролог, без разницы.
Отличие будет в том, что без фреймворков типа django вам придётся очень много традиционных и ожидаемых для веб-разработки вещей написать с нуля. В стандартных библиотеках Python 3 есть группа модулей http, которые содержат классы для элементарной работы с HTTP запросами, но, судя по тому, что там написано в документации, вам придётся написать самостоятельно вообще всё:
  1. маршрутизацию - парсить строку запроса urllib'ом и по результатам выбирать, какую функцию выполнить;
  2. шаблонизатор - питон это не PHP, для генерации HTML ответов, которые могут быть огромного размера, нужно тоже придумать что-то более удобное, кроме конкатенации строк;
  3. сессии - молитесь на разработчиков питона, что они потрудились написать http.cookies, но всё остальное придётся написать ручками;
  4. парсинг тела запроса - BaseHTTPRequestHandler даёт вам только io.BufferedIOBase поток, вам придётся разобрать вручную, что там вам посылает браузер в теле запроса: JSON, XML, x-www-form-urlencoded  или вообще файлы;
  5. генерация правильного HTTP ответа - код статуса и все нужные заголовки, включая печеньки, нужно не забывать проставить в каждом маршруте соответственно тому, какое тело мы возвращаем. Тело возвращается опять же, через поток вывода, а не каким-нибудь более удобным способом.
Я не упоминаю сейчас вообще вопросы фронт-энда: какой HTML будет на веб-страницах и как его генерировать, как организованы CSS стили, будет ли там JS скриптинг и как организовано хранение (генерация?) Javascript кода, это всё придётся решать потом, по мере усложнения ваших веб-страниц. Для веб-сервера это всё побочные вещи, он просто текст в поток вывода пишет.
Если у вас полностью статический веб-сайт, то есть, все веб-страницы хранятся в уже готовых файлах, и ничего, кроме файлов (.html, .css, .js, картинки, шрифты) веб-сервер отдавать не будет, то можно обойтись вот таким кодом с использованием стандартного класса http.server.SimpleHTTPRequestHandler:
import http.server
import socketserver

ServerAddress = ("", 8000)
RequestHandler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(ServerAddress, RequestHandler) as httpd:
    httpd.serve_forever()
(полностью украдено из документации)
После того, как вы напишете всю вышеперечисленную базовую функциональность, от современных веб-приложений обычно ожидаются и более сложные вещи, например, защита от CSRF, сложные формы аутентификации типа OAuth2, авторизация по ролям, кэширование и так далее.
Более того, возможно, на определённом этапе функционал или производительность стандартного http.server вас перестанет устраивать, а это значит, что нужно будет опуститься на один уровень абстракции ниже и написать свой HTTP сервер на базе sockerserver.TCPServer, впрочем, если вы будете способны самостоятельно решить такую задачу, на этом уровне вам уже не нужен будет Яндекс.Кью.
Для поддержки всего, что я написал выше, вы напишете, фактически, свой веб-фреймворк. Возможно, это будет оправдано. А возможно, нет.
7 экспертов согласны
Руководитель отдела Frontend разработки. Участвовал в создании platon.ru, роскосмос...  · 19 мая 2022  · denni.io
Правильный ответ - просто писать код. Ведь что такое фреймворк? Это совокупность библиотек. Библиотека - это просто код (утрируя). Хотите все сделать сами - пишите сами все, что вам необходимо. Просто проблема в том, что программист едва-ли станет такое делать: библиотеки пишут сообщества, они, как правило либо уже прошли миллиард итераций оптимизации или находятся в... Читать далее
Руководитель отдела разработки пользовательских интерфейсов компании АО ОКБПерейти на credistory.ru
3 эксперта согласныи2 эксперта не согласны
Теоретически возможно, но на практике нет. Потому, что тогда пропадет весь смысл использовать python. Если писать... Читать дальше
Представитель хостинг-провайдера Eternalhost. Отвечаю на вопросы про хостинг, виртуальные...  · 20 мая 2022
Создать конечно можно, но вот стоит ли и зачем это нужно — это большой вопрос. Фреймворки имеют готовые к использованию функции из коробки, поэтому вам не нужно каждый раз кодировать их с нуля. Без использования фреймворка вам, помимо прочего, придется «вручную» прописывать такие функции, как: - компрессия запросов/ответов; - парсинг запросов; - URL-маршрутизация; -... Читать далее
Просто о настройках и администрировании сайта в нашем блоге.Перейти на eternalhost.net/blog
Разработка высоконагруженных систем. Опыт 15+   · 20 мая 2022  · progolang.zenclass.ru
Здравствуйте! Вопрос очень интересный. Сайт создается не на языке python, а с помощью html, css и js. Язык программирования python - служит как обертка, для создания структуры сайта. В конечном итоге у вас получиться директория с файлами или веб сервер, который работает с форматом вышеперечисленных файлов. По этому следуют подумать над выбором языка программирования... Читать далее
Я в восхищении! Сам бы ответил грубо: "в огороде бузина, а в Киеве дядька". Видать, я давно не общался с... Читать дальше
Хороший человек :3  · 20 мая 2022
Смотря что за сайт вы хотите сделать. Если вам нужен статичный сайт без работы с данными(регистрация пользователя, профиль, новости, блог, товары, статьи и т.п.) просто такой - информационный сайт(визитка) вам нужны: * html(вёрстка) * css(стилизация) * js(динамика на страничке: анимации, всплывашки и т.п.) Если вы на сайте хотите работать с данными(регистрация... Читать далее
1 эксперт согласен