так какpythonКод элегантен, красив и прост в обслуживании, и все больше и больше людей предпочитают его использовать.PythonЗаймитесь веб-разработкой. иPythonизWebВо фреймворке распускаются сотни цветов, а в более популярных фреймворках их много.Django, маленький и гибкийFlask,Bottleи эффективную асинхронную структуруTornado,sanic. Пока вы выбираете один из множества фреймворков и читаете его документацию, вы можете легко его создать.web app, вам вообще не нужно заботиться о принципе, который он реализует.
Эта статья предназначена для того, чтобы разобраться в веб-разработке.
Три мушкетера фронтенд-страницы
Открываем браузер и вводим URLyukunweb.com, и далее мы видим страницу которую показывает нам браузер.В это время открываем инструменты разработчика браузера и нажимаемNetwork, обновите страницу, ниже вы увидите запросurl, нажмитеResponse, вы можете видеть, что сервер возвращается в браузерhtmlинформация о файле. Если скопироватьResponseСодержимое ответа, сохраненное какindex.htmlИ откройте его в браузере, вы все еще можете видеть содержимое домашней страницы, но кажется, что некоторые стили и функции страницы отсутствуют.
Это связано с тем, что когда браузер получаетHTMLПосле исходного кода он будет основан наHTMLправила для отображения страницы, а затем в соответствии сHTMLссылку, автоматически отправить HTTP-запрос на сервер, получить соответствующее изображение иJavaScript,CSSи другие ресурсы и, наконец, отобразить полную страницу. так что мы будемNetworkНиже вы можете увидеть множество дополнительных.js,.cssДождитесь запроса суффикса.
Фактически, страница, которую мы видим, является браузером в соответствии сHTMLправила, показанные нам.HTMLСообщите браузеру, где находится навигация, где основная панель, а где боковая панель. И то, как эта информация отображается, или стиль отображения, зависитCSSКредит для файла. Например, выпадающее меню навигации скрыто, а всплывающее окно скрыто.JavaScriptэффект.
Если вы хотите заниматься веб-разработкой, вы должны быть знакомы сHTML,CSS,JavaScriptЗдесь рекомендуется знание Трех мушкетеровW3schoolучебник по внешнему интерфейсу, где я также изучаю внешний интерфейс:W3school
Взаимодействие клиента и сервера
После понимания трех мушкетеров в предыдущем абзаце вы будете знать, как написать веб-страницу. Затем в адресной строке браузера введитеURL,прибытьWebЧто именно происходит при рендеринге страницы.
Как показано на рисунке, обычно такой веб-браузер, который получает ресурсы сервера путем отправки запроса, можно назвать клиентом (клиентом). Сначала отправьте запрос на сервер, большинство из которых доступны в виде GET-запросов.Сервер получает ваш запрос, затем извлекает запрошенный ресурс и возвращает его клиенту.
Как происходит общение между сервером и клиентом и как сервер понимает запрос клиента? Здесь требуется спецификация протокола, которым является HTTP (протокол передачи гипертекста). Можно сказать,WebУстановленоHTTPсообщается по протоколу.
Как показано на рисунке, это все еще предыдущий пример, откройте браузер для доступаyukunweb.com, откройте инструменты разработчика браузера, перейдите на вкладку, отмеченную на рисунке (не забудьте нажать просмотреть проанализированные), вы можете увидеть первые две строки заголовка запроса, отправленного клиентом на сервер.
GET / HTTP/1.1
Host: www.yukunweb.com
GET в начале первой строки указывает на тип запроса на доступ к серверу, который называется методом. символы, которые следуют/Указывает объект ресурса, к которому запрашивается доступ, то есть URI запроса. ПоследнийHTTP/1.1, то есть номер версии HTTP, который используется, чтобы предложить клиенту использоватьHTTPФункция протокола.
Подводя итог, первая строка содержания запроса означает: запросить доступ к определенной станцииHTTPна сервере/Ресурсы (домашней) страницы. Итак, вторая строкаHostУказывает, что запрошенное доменное имя является адресом сервера.
Как показано, если этоPOSTЕсли вы запросите, будет не только информация заголовка запроса, но иForm DataСодержимое сущности запроса.
Что касается сервера, который получает запрос, то он вернет результат обработки содержимого запроса в виде ответа, см. первую строку на рисунке:
HTTP/1.1 200 OK
Начальная часть по-прежнему соответствует серверуHTTPверсия, за которой следует200 OKКод состояния и фраза причины, представляющая результат обработки запроса.200Код состояния указывает на то, что ответ был успешным, общий404Указывает на ошибку доступа,500Указывает, что сервер ответил ошибкой. здесьOKНет фиксированных правил, вы также можете позволить ему вернутьсяGOODили что-то.
Следующая строка - информация о сервере, этот сайт используетNginxСервер в следующей строке показывает дату и время, когда был создан ответ. на следующей строкеContent-TypeУказывает тип контента, и клиент будет полагаться на него, чтобы определить, является ли содержание ответа веб-страницей, аудио, изображением и т. д.
Вот лишь краткое введениеHTTPПротокол — это протокол связи между клиентом и сервером. Если вы хотите узнать об этом больше, рекомендуется прочитать The Definitive Guide to HTTP.
WSGI
Если вы просматриваете адресhttp://www.yukunweb.com/search-result/?keywords=音乐, вы посетите результаты поиска музыкальных ключевых слов этого сайта. Мы знаем, что клиент отправляет запрос на сервер, так как же сервер получает ресурс. На самом деле это возвращает приложение, работающее на бэкенде.Например, если вы захватываете страницу и получаете информацию, обработка этой логики должна выполняться нашей программой.
Однако получение и разбор клиентскогоHTTPзапрос отправляетсяHTTPВ ответ на эти низкоуровневые операции серверная программа точно не справится. Итак, чтобы сосредоточиться только на логике веб-бизнеса, вам также нужен сервер иwebСвязующий слой между приложениями — WSGI.
Что такое WSGI (интерфейс шлюза веб-сервера)?
WSGIПеревод - интерфейс шлюза веб-сервера. Он просто норма, которая определяетWebКак работает серверPythonприложения взаимодействуют, используяPythonнаписаноWebПриложение может взаимодействовать с веб-сервером (nginx/apache).
Канонический адрес:PEP 333
WSGIдаPythonКраеугольный камень веб-разработки, с ним у вас есть все, и он существует для двух целей:
- описать, как веб-сервер взаимодействует с веб-приложением (передавая клиентские запросы в приложение),
- Опишите, как веб-приложение обрабатывает запросы и возвращает данные на сервер.
так какPythonВстроенная стандартная библиотека имеетWSGIбиблиотекаwsgiref, пишем вариант на его основеWSGIПример цели:
from wsgiref.simple_server import make_server
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
start_response(status, response_headers)
body = '<h1>Hello, {name} !!!</h1>'.format(name=environ['PATH_INFO'][1:] or 'WSGI')
return [body.encode('utf-8')]
app = make_server('', 8000, application)
app.serve_forever()
Запустите программу, если об ошибке не сообщается, откройте в это время браузер и введите адрес127.0.0.1:8000и127.0.0.1:8000/GuTianle, вы можете увидеть страницу, возвращенную программой. Как показано на рисунке:
Мы видим запрос, для его записи требуется толькоWSGIфункция обработки. Поскольку вся информация о запросе содержится вenviron, чтобы мы могли возвращать разные данные на основе этой информации.
параметр:
- environ: тип словаря, в котором хранится вся информация, относящаяся к клиенту. Если вы хотите узнать, какие параметры в нем, вы можете изменить приведенный выше код и добавить строку возврата
for k, v in environ.items()Цикл выводит все параметры из словаря. - start_response: вызываемый объект, который принимает два обязательных параметра и один необязательный параметр:
- статус: строка, представляющая строку состояния ответа HTTP, например 200, 404.
- response_headers: список, содержащий кортежи следующей формы: (имя_заголовка, значение_заголовка), используемые для представления заголовков ответа HTTP, например ('Content-type', 'text/html')
- exc_info (необязательно): информация, которую сервер должен вернуть браузеру при возникновении ошибки.
Возврат: итерируемый объект, сервер может получить все содержимое тела путем обхода этого итерируемого объекта, содержимое может бытьhtmlтак же может бытьjson.
Вот краткое введениеWSGIЧто это такое, что он делает. если ты понимаешьWSGI, затем напишитеPythonВеб-фреймворк очень прост. Вот почемуPythonЕсть сотни причин для веб-фреймворков.
Внедрение фреймворка на основе WSGI
Выше мы понимаемWSGIЧто он делает, тогда мы реализуем простойwebФреймворк, можно сказать, нехитрый.
from wsgiref.simple_server import make_server
class Application(object):
def __init__(self, environ, start_response):
self.start_response = start_response
self.path = environ['PATH_INFO']
def __iter__(self):
if self.path == '/':
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, esponse_headers)
yield '<h1>Hello,World!</h1>'.encode('utf-8')
elif self.path == '/wsgi':
status = '200 OK'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, response_headers)
yield '<h1>Hello,WSGI!</h1>'.encode('utf-8')
else:
status = '404 NOT FOUND'
response_headers = [('Content-type', 'text/html')]
self.start_response(status, response_headers)
yield '<h1>404 NOT FOUND</h1>'.encode('utf-8')
if __name__ == "__main__":
app = make_server('127.0.0.1', 8000, Application)
print('Serving HTTP on port 8000...')
app.serve_forever()
этоApplicationкласс в самый разWSGIВыполняется еще один слой простой инкапсуляции, потому что, как упоминалось вышеWSGIФункция возвращает итерируемый объект, поэтому вам необходимо реализовать метод __iter__, который управляет маршрутизацией запросов клиента и возвращает разные выходные данные.
Конечно, есть много вещей, которые нужно учитывать, если вы хотите масштабироваться в приличную структуру, например что-то вродеflaskТакая удобная система маршрутизации, а так же обработка запросов пользователей и так далее. Короче говоря, это процесс, который требует много метаний, таких какflask的0.1Версия без комментариев составляет более 200 строк, и сейчас последняя версия. . .