15

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

Просто в общем скажите, что нужно сделать. Детали я сам погуглю

P.S. Я знаю, что это создание велосипедов, но это мне нужно для изучения работы веб приложений в частности и обучения программированию в общем

OLD
  • 383
  • 3
    python -m pureSite Только модуль нужно написать – vp_arth Nov 24 '20 at 16:10
  • 1
    а чем не устраивает джанго ? – Интик Nov 24 '20 at 16:11
  • 2
    Изучить спецификацию CGI/WSGI/ASGI (по вкусу), написать код по спецификации и запустить подходящим веб-сервером. Ну или набраться смелости, чтобы изучить спецификацию HTTP и написать свой собственный веб-сервер – andreymal Nov 24 '20 at 16:14
  • 1
    @andreymal HTTP проще чем все вышеперечисленное,) – eri Nov 24 '20 at 17:17
  • 2
    @eri триста страниц спецификации HTTP/1.1 это по-вашему проще?) И это я ещё про HTTP/2 не вспоминаю) – andreymal Nov 24 '20 at 17:54

3 Answers3

14

Отличный вопрос - зря минусим.

В каталоге проекта

создай папку ./cgi-bin напиши файлик ./cgi-bin/index.py с содержимым

#!/bin/python3

print("Content-Type: text/html") # Хидеры ответа print() # Пустая строка сразу после хидеров

А потом текст ответа

print("<TITLE>CGI script output</TITLE>") print("<H1>This is my first CGI script</H1>") print("Hello, world!")

Сделай скрипт исполнимым

chmod +x ./cgi-bin/index.py

И запукай http сервер (можно через apache или lighttpd)

python3 -m http.server --cgi 8000

Переходи по ссылке http://localhost:8000/cgi-bin/index.py и вот Hello-Word на чистом питоне готов.

Вариант чуть посложнее с одним модулем

import http.server

class Handler(http.server.BaseHTTPRequestHandler): def do_GET(self): self.send_response(200, 'OK') self.send_header('Content-Type', 'text/html') self.end_headers() self.wfile.write(''' <TITLE>Handler script output</TITLE> <H1>This is my first Handler script</H1> Hello, world! '''.encode())

httpd = http.server.HTTPServer(('', 8000), Handler) httpd.serve_forever()

Тут нет обработчика URI и один ответ будет на всех страницах.

eri
  • 35,224
4

В стандартной библиотеке Python есть модуль http.server. Это HTTP-сервер, на основе которого можно создавать сайты любой сложности. Конечно, чем больше сложность, тем больше вам придётся написать функциональности, которая уже есть во фреймворках. Но если вам нужен сервер для отладки или вы хотите понять как что устроено, то начните с него.

u_mulder
  • 3,602
3

Если прям без фреймворка, то cgi. Но... зачем? Есть же фреймворки.

  • Flask

    Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков[en] — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.

  • Django

    Django (Джанго, ['dʒæŋɡoʊ][6]) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC[7]. Проект поддерживается организацией Django Software Foundation.

django docs | flask docs

  • 7
    Какой из них «Без использования фреймворка»? – vp_arth Nov 24 '20 at 16:14
  • 1
    @vp_arth Пардон. Сейчас дополню. – USERNAME GOES HERE Nov 24 '20 at 16:15
  • 3
    Мне вот интересно - человек спросил как написать "без фреймворка". Может он суть хотел понять, набить себе шишек и написать свой. Но нет, приходит советчик - как же, есть фреймворки, не надо ничего другого. Еще и с википедии копипасту просто вставил. – u_mulder Nov 24 '20 at 16:35