Как работает веб-сервер 🤔 объясняю на пальцах
расскажу сегодня простыми словами, как работают сайты и как получается, что после ввода адреса своего любимого сайта в браузерной строке у тебя появляется страница
1. браузер берет введенный адрес (по сути это адресат, как на конверте) и идет по нему куда-то там на сервер
2. запущенная на сервере (специальный или даже обычный компьютер) программа получает запрос вида “а дай-ка мне страницу – там пользователь просит”, формирует исходный код страницы на языке HTML (это такой язык разметки веб-страниц) и отдает обратно отправителю
3. далее по сетям этот ответ идет обратно и возвращается к нам в браузер. После чего тот красиво рисует сайт на основе полученного описания в формате HTML
код тут 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server/simplest_web_server.py
берите и запускайте свой первый собственный веб-сервер 💪
#python #webServer #howItWorks #наПальцах
расскажу сегодня простыми словами, как работают сайты и как получается, что после ввода адреса своего любимого сайта в браузерной строке у тебя появляется страница
1. браузер берет введенный адрес (по сути это адресат, как на конверте) и идет по нему куда-то там на сервер
2. запущенная на сервере (специальный или даже обычный компьютер) программа получает запрос вида “а дай-ка мне страницу – там пользователь просит”, формирует исходный код страницы на языке HTML (это такой язык разметки веб-страниц) и отдает обратно отправителю
3. далее по сетям этот ответ идет обратно и возвращается к нам в браузер. После чего тот красиво рисует сайт на основе полученного описания в формате HTML
код тут 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server/simplest_web_server.py
берите и запускайте свой первый собственный веб-сервер 💪
#python #webServer #howItWorks #наПальцах
👍2👎1🤔1
Реальный Код
Как работает веб-сервер 🤔 объясняю на пальцах расскажу сегодня простыми словами, как работают сайты и как получается, что после ввода адреса своего любимого сайта в браузерной строке у тебя появляется страница 1. браузер берет введенный адрес (по сути это…
продолжим… и поиграемся немного с нашим сервером
вывести дату – уже неплохо. Но давайте добавим чуть больше какой-то логики поинтереснее
например, выведем календарь на текущий месяц. Мы уже делали это выше стандартными средствами Питона 👆 https://t.me/the_real_coding/28
просто переиспульзуем ту же функцию + завернем ее вывод в формат HTML
код в итоге стал не сильно сложнее + там есть мои комменты – обязательно посмотрите. При этом мы продвинулись вперед и добавили нашему серверу чуть больше полезности
а впереди еще интереснее! 😉
код: https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar.py
запустите сами и проверьте у себя. Вам нужен только лишь Питон, даже IDE не потребуется 👌
#python #calendar #webServer #играемся
вывести дату – уже неплохо. Но давайте добавим чуть больше какой-то логики поинтереснее
например, выведем календарь на текущий месяц. Мы уже делали это выше стандартными средствами Питона 👆 https://t.me/the_real_coding/28
просто переиспульзуем ту же функцию + завернем ее вывод в формат HTML
код в итоге стал не сильно сложнее + там есть мои комменты – обязательно посмотрите. При этом мы продвинулись вперед и добавили нашему серверу чуть больше полезности
а впереди еще интереснее! 😉
код: https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar.py
import calendar
import datetime
import http
from http.server import BaseHTTPRequestHandler, HTTPServer
Handler = http.server.SimpleHTTPRequestHandler
class HelloWorldServer(BaseHTTPRequestHandler):
def do_GET(self):
# печатаем текущий месяц и сохраняем в строку
today = datetime.datetime.today()
month_calendar_str = calendar.month(today.year, today.month)
# в HTML есть ряд особенностей вывода текста; обрабатываем их:
# 1. переход на новую строку в HTML осуществляется не с помощью символа '\n',
# а добавлением тега '<br>'
month_calendar_str = month_calendar_str.replace('\n', '<br>')
# 2. несколько пробелов подряд выводятся как один, потому вместо каждого
# пробела ставим спец. символ, принудительно вставляющего пробел
month_calendar_str = month_calendar_str.replace(' ', ' ')
# добавляем в наш HTML-код страницы пункт, указывающий, какая кодировка
# используется на странице:
# <meta charset="UTF-8">
# это нужно, чтобы корректно отображались русские символы
# еще один нюанс - используем тег '<tt>' (телетайп, то есть моноширинный шрифт),
# чтобы наши строки не съезжали и все понедельники были друг под другом,
# а субботы - под субботами
html_page = \
f"""
<html>
<head>
<title>Hello, World!</title>
<meta charset="UTF-8">
</head>
<body>
<h1 align='center'>Календарь</h1>
<tt>
{month_calendar_str}
</tt>
</body>
</html>
"""
body = html_page.encode('UTF-8', 'replace')
self.send_response(200)
self.send_header("Content-type", "text/html")
self.send_header('Content-Length', str(len(body)))
self.end_headers()
self.wfile.write(body)
if __name__ == "__main__":
webServer = HTTPServer(server_address=('127.0.0.1', 8080),
RequestHandlerClass=HelloWorldServer)
print('Server started')
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
except Exception as ex:
print(f'Server unexpectedly finished ({ex})')
webServer.server_close()
print('Server stopped')
запустите сами и проверьте у себя. Вам нужен только лишь Питон, даже IDE не потребуется 👌
#python #calendar #webServer #играемся
👍1👎1🔥1🤔1
совершенствуем наш календарь 🗓️
- отметим красным цветом выходные дни, для чего напишем собственную функцию
- используем тег
- используем русские названия дней недели и месяцев
- выделим текущий день
- выведем весь календарный год
полный код 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar_full_year.py
смотрите-изучайте-задавайте вопросы 🙌
PS запилил пост и потом понял, что ошибочка затесалась – не отображались последние дни месяцев 😅 недотестировал 😁
#python #calendar #webServer #играемся
- отметим красным цветом выходные дни, для чего напишем собственную функцию
- используем тег
<table>
, чтобы дни недели были выровнены друг под другом- используем русские названия дней недели и месяцев
- выделим текущий день
- выведем весь календарный год
полный код 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar_full_year.py
смотрите-изучайте-задавайте вопросы 🙌
PS запилил пост и потом понял, что ошибочка затесалась – не отображались последние дни месяцев 😅 недотестировал 😁
#python #calendar #webServer #играемся
👍2👎1🤔1
+ АПИшку давайте прикрутим, чё уж там 😁
дернем публичное АПИ для получения списка праздников, чтобы отметить красным официальные выходные дни
тут в канале все как всегда просто, когда двигаемся маленькими шагами step-by-step – берем
код 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar_full_year_with_public_holidays.py
#python #publicApi #requests #webServer #calendar #играемся
дернем публичное АПИ для получения списка праздников, чтобы отметить красным официальные выходные дни
тут в канале все как всегда просто, когда двигаемся маленькими шагами step-by-step – берем
requests
, получаем ответ по URL-адресу для России, ответ преобразуем в питоновский объект списка, а оттуда выдираем список дат-праздников. Далее, если выводимая дата находится в этом списке, то отмечаем ее красным также, как и выходные дни:
def get_public_holidays(year: int) -> List[datetime.date]:
out = list()
res = requests.get(f'https://date.nager.at/api/v3/PublicHolidays/{year}/ru')
if not res.ok:
return out
holiday_list_data = res.json()
for holiday in holiday_list_data:
date_str = holiday['date']
date = datetime.datetime.strptime(date_str, '%Y-%m-%d')
out.append(date.date())
return out
код 👉 https://github.com/DiPaolo/the-real-coding/blob/main/python/simplest_web_server_ext/simplest_web_server_calendar_full_year_with_public_holidays.py
#python #publicApi #requests #webServer #calendar #играемся
👍3👎1🤔1
а вот вам любопытное – бенчмарк веб-серверов https://www.techempower.com/benchmarks/
ищите свой любимый фреймворк, берите названия фреймворков для изучения и тыканья в них палочкой. но имейте ввиду: там есть не все. как минимум, там просят добавить некий плюсовый Drogon, которого в бенчмарке нет
и пожалуйста, помните: это искусственные тесты. то есть для ваших нужд и в вашем кейсе те же фреймворки могут показывать иные результаты и быть не такими шустрыми
#benchmark #link #webServer
ищите свой любимый фреймворк, берите названия фреймворков для изучения и тыканья в них палочкой. но имейте ввиду: там есть не все. как минимум, там просят добавить некий плюсовый Drogon, которого в бенчмарке нет
и пожалуйста, помните: это искусственные тесты. то есть для ваших нужд и в вашем кейсе те же фреймворки могут показывать иные результаты и быть не такими шустрыми
#benchmark #link #webServer
www.techempower.com
TechEmpower Framework Benchmarks
Performance comparison of web application frameworks using community-contributed test implementations.
🔥1🤔1