|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|
Простой веб-сервер с directories walk28.09.2017, 17:31. Показов 3991. Ответов 24
Метки нет (Все метки)
В общем, на просторах инета уже многовато поискал информации, но сложновато все структуризировать и создать свой план действия. Смотрим скриншот, что мне нужно. Дальше я бы хотел услышать как мне лучше всего это сделать. Возможно у вас даже есть ссылки на готовое, чтоб можно было засесть и разбирать по строчке сам код.
0
|
|
| 28.09.2017, 17:31 | |
|
Ответы с готовыми решениями:
24
простой веб-сервер Простой веб сервер простой веб сервер |
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 28.09.2017, 17:55 | |
|
TatiusWazo, А причем тут Python? Тебе надо брать apache or nginx и все.
0
|
|
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|
| 28.09.2017, 19:49 [ТС] | |
|
alex925, это нужно на пайтоне написать, используя библиотеку сокет.
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 28.09.2017, 20:29 | |
|
TatiusWazo, Ну в этом случае предыдущее сообщение все равно не отменяется, web сервер в любом случае нужен.
Теперь следующий вопрос, зачем тебе писать вебню именно на сокетах? На сокетах пишут специфические вещи только (чаты и т д), вебню на голых сокетах не пишут.
0
|
|
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|
| 28.09.2017, 22:12 [ТС] | |
|
alex925, такое задания дали и ты меня не совсем понимаешь, точней я не все рассказал.
В общем, суть задания: Кликните здесь для просмотра всего текста
Написать веб-сервер, используя библиотеку socket
Программа должна предоставлять доступ к файлам в директории, из которой она была запущена. Должна быть возможность ходить по директориям При переходе на файл должно воспроизводиться его содержание Т.е., я вроде и имею некую представленность как и что писать, но как все в купу сложить - нет. Программирования учу вторую неделю только, наверное такое пишеться за пару часов, но я что-то в тупике.
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 29.09.2017, 07:52 | |
|
TatiusWazo, Ну тогда открываешь гугл и вперед. Матчасти там много, на форуме так не расскажешь все.
Вот пример простой статьи https://ruslanspivak.com/lsbaws-part1/ и подобных гуглится уйма https://www.google.com/search?... 40&bih=714
0
|
|
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|
| 29.09.2017, 15:39 [ТС] | |
|
alex925, я все это читал уже)
Но, как мне реализовать именно ту часть, чтоб я мог перемещаться между папками, как на скриншоте, который я прикрепил в ОП посту? Видел уроки с "directories walk", но они мне ничего не говорят, как реализовать это. Какой-то бы пример наглядный увидит.
0
|
|
|
|
|||||||||
| 29.09.2017, 22:57 | |||||||||
Сообщение было отмечено TatiusWazo как решение
Решение
Нарисовал так сказать just for fun... Очень примитивный, без всяких css украшений и javascript примочек, а также должной обработки ошибок. ---------------------------------------- Ну если хочется
1
|
|||||||||
|
|
||||||
| 30.09.2017, 01:44 | ||||||
|
Если добавить это перед 55 строкой - появится ссылка для перехода в родительский каталог
1
|
||||||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
||
| 30.09.2017, 04:46 [ТС] | ||
|
Очень благодарен, таки много есть разбирать ![]() Возможно даже время от времени буду сюда что-то писать по вопросам. Еще и сколько новых библиотек) Я думал, самый простой веб-сервер с моим заданием, где-то на 15-20 строчек. Моя серверная часть была написанная на 7 строк и мне говорили, что этого хватает)
0
|
||
|
|
|||||||||||||||||
| 30.09.2017, 14:19 | |||||||||||||||||
![]()
Кстати, стоит залезть в его внутренности, чтобы посмотреть - а как там все это реализовано. (Я и сам чего-то протупил - и не глянул.) Сокеты это слишком низкий уровень - работа с байтовыми данными, которые помимо декодирования, потом еще и распарсить нужно. Поэтому коротко не выйдет. Впрочем, написать бесполезный ничего не делающий web-server на 7 строк вполне можно, но смысл :-) Добавлено через 57 минут P.S. Посмотрел код http.server и увидел некоторые свои ошибки и недочеты. В частности, никакой javascript: document.location.href в ссылке для перехода нафиг не нужен. Достаточно наличия правильно сформированной относительной ссылки.Добавлено через 4 минуты То есть вместо строки 37 достаточно
В конечном итоге функция generate_html упрощается до такого варианта:
1
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
||
| 30.09.2017, 16:54 [ТС] | ||
|
Garry Galler, пользоваться готовыми модулями в стиле SimpleHTTPServer не разрешали, но я не знал, что как-то можно посмотреть серединку модуля, как там все реализовано.
https://docs.python.org/3/library/http.server.html Или имело ввиду, что такого такого плана https://hg.python.org/cpython/... PServer.py ?
0
|
||
|
|
||
| 30.09.2017, 17:20 | ||
|
Документация требуется, если нужно просто использование модуля, а исходный код - для понимания того, как это работает. Добавлено через 3 минуты P.S. Исходный код модуля http.server находится в папке Lib\http.
1
|
||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|||||||
| 30.09.2017, 19:39 [ТС] | |||||||
|
Так как я две недели только программирую, я еще тот нуб и вовсе не использую функции и какие либо проверки. Все же, твой код я разобрал где-то на 30%. К примеру, мой код смотрится как-то так:
0
|
|||||||
|
|
||
| 30.09.2017, 19:45 | ||
|
Чтобы были ссылками - нужно использовать правильный html код с элементами <a> и атрибутами href. А вот этого всего я не вижу. Тем более, что шаблон в переменной http_response работает только при использовании шаблонизаторов типа Jinja, а не сам по себе.
1
|
||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
||||||
| 30.09.2017, 21:43 [ТС] | ||||||
|
Garry Galler, да вообще никак не выходит.
Это задание с веб-сервером отбило у меня все желания с программированием, ибо такие жесткие тупняки пошли одним за одним (: У меня вот даже не было понимания, что этот шаблон будет работать только с Jinja (не имею даже представления, что это). Имея такой код, только чтоб вместо "Hello, World!" оно отображало список директорий и я мог кликать по ним (как ваша функция "def generate_html(root)"?) Или тут все нужно переписывать?
0
|
||||||
|
|
||||
| 30.09.2017, 23:41 | ||||
|
1
|
||||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
|||||||||||||||||||||
| 01.10.2017, 02:59 [ТС] | |||||||||||||||||||||
|
Garry Galler, потратил 2 часа, чтоб понять, что такое сокеты (а то раньше просто понимал, что это какой-то мостик между двумя процесами, которые между собой соединяются) и начал лучше понимать логику вашего кода, но все равно далеко от идеала.
1. Создаем сокет. def main(server, port) - тут мы создаем сокет: socket - Создаем сокет. bind - Привязываем к нему IP и порт. listen - Объявляем, что готовы принимать соединения. У меня это:
def route(conn, addr) - устанавливаем соединения и отправляем данные с сети? receive - tmp = conn.recv(1024) - получаем данные с сети в 1кб. а остальное уже связанное как раз с отображением generate_html, да? в общем, def route я не совсем понял, вроде и все просто, но одновременно очень запутано для меня, так как нужно отлично понимать ту часть кода, которая до него встречается. У меня это:
def send_answer(conn, method="GET", protocol="HTTP/1.1", status="200 OK", charset="utf-8", typ="text/plain", data="") - отправка данных. Я так понимаю, тут мы делаем читабельной формат верхних аргументов? У меня это:
Это у нас в def main(server, port) происходит. У меня это:
0
|
|||||||||||||||||||||
|
|
||||||
| 01.10.2017, 14:57 | ||||||
|
Посмотри функцию list_directory в http.server.py - там все сделано по тому же принципу что и у меня, только вместо конкатенации используется массив строк, которые затем соединяются в одну посредством join, кодируются в байты и отправляются клиенту(браузеру).
0
|
||||||
|
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 35
|
||||||
| 02.10.2017, 17:07 [ТС] | ||||||
|
Garry Galler, что ж, все до сих пор без результатов.
Какой-то прогресс даже был, ссылки генерировались, но их не можно было открыть в браузере (код был до усрачки кривой с множеством костылями, как не крути). Если у вас будет время и желание над этим посидеть, буду благодарен, если еще раз посмотрите.
0
|
||||||
| 02.10.2017, 17:07 | |
|
Помогаю со студенческими работами здесь
20
Простой веб-сервер Как написать простой веб сервер
Посоветуйте простой веб сервер для картинок Решить проблему: простой веб сервер на основе boost::asio падает именно при первом же обращении к серверу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|