Является ли Python только для создания бэкэндов при создании сайтов?

2496
Léo Léopold Hertz 준영

Я не видел ни одного сайта, созданного Python, чтобы в конце URL сайта содержался .py. Я видел только index.htmlи index.php, но иногда ничего, как в SO. Я знаю, что вы можете как-то скрыть конец с помощью .htaccess -file.

Я хотел бы знать причину этого.

Почему нет сайта, оканчивающегося на .py?

4
зайдите на stackoverflow.com для получения дополнительной помощи с Python +++ pavsaund 14 лет назад 5
соответствующий вопрос в настоящее время на http://stackoverflow.com/questions/1185248/is-python-only-for-building-backends-when-you-need-to-write-sql-by-hand Léo Léopold Hertz 준영 14 лет назад 1

9 ответов на вопрос

17
hayalci

Хороший URL не зависит от технологий, поэтому следует избегать расширения .php, .py или .rb. В основном, платформы Python (например, Turbogears) обрабатывают весь разбор URL, а программа Python, работающая в фоновом режиме, получает все свои параметры в хорошей структуре данных, поэтому в этом случае вы не увидите никакого расширения файла.

Смотрите "классные URI не меняются" Тимом Бернерсом-Ли

8
Zifre

Ну, наверное, большинство людей скрывают расширение, потому что это более разумный путь. Это означает, что если вы скажете, что переключились на PHP (не то, что вам хотелось бы ...), вам не пришлось бы менять расширения.

Однако есть сайт с .pyрасширениями (он есть в нескольких частях Google).

Лучше задать следующие вопросы: почему большинство пользователей ASP.NET и PHP настаивают на сохранении расширений?

Ваш ответ подсказывает мне, что легче избавиться от расширения в Python, чем в PHP и ASP.NET. --- ** Какой модуль Python обеспечивает функциональность? ** Léo Léopold Hertz 준영 14 лет назад 0
@ Маси: Там нет модуля, который делает что-то конкретное, чтобы удалить расширение. На самом деле в Python нет расширения, от которого можно избавиться. Иными словами, расширение в URL не обязательно должно соответствовать расширению файла. Поэтому, если ваше веб-приложение состоит из файлов .py, нет абсолютно никаких причин, по которым ваши URL-адреса должны заканчиваться на .py. Это может не иметь смысла, если вы привыкли к PHP, так как PHP заставляет расширение URL быть таким же, как расширение файла (ну, вы можете даже обойти это, но это не особенно просто); я полагаю, в ASP это то же самое. David Z 14 лет назад 2
4
dbr

Обычно к PHP-сценариям обращаются напрямую, аналогично CGI-сценарию - в основном вы обращаетесь к сценарию, как к любому обычному файлу, но веб-сервер перехватывает этот запрос, запускает сценарий и возвращает вывод вместо содержимого файла.

Большинство фреймворков Python имеют свои собственные системы маршрутизации, где вы определяете что-то вроде:

urls = ( ('^/article/(\d+)$', ArticleController), ('^/user/(.+?)$', UserController) ) 

..то вы получите доступ к чему-то вроде ..

http://example.com/router.py?uri=article/123 

..И она будет проходить через отображение URL, определенного в urls, и отправить запрос в соответствующий класс ... но имеющий router.pyучастие во всех ваших URL - адресов немного дрянной, поэтому можно использовать mod_rewriteдля перенаправления /(.*)на /router.py/$1(через .htaccess, ваш Apache конфигурация и т. д.)

Вы можете сделать то же самое с PHP или любым другим языком - именно так работает CodeIgniter (среда PHP)

Если вы совершенно безумны, вы можете использовать mod_rewriteи сопоставлять /user/(\d+).pyс /ViewController.php?id=$1чем-либо, но обычно нет никакого смысла добавлять поддельное расширение на страницу (есть несколько исключений, в основном обратная совместимость и предоставление доступа к данным в различных форматах в API).

Вы также можете сделать «путь PHP», используя Python, если вы пишете каждую страницу в виде отдельного CGI-скрипта, просто большинство фреймворков Python, как правило, используют настройку MVC (или MVC-подобную), которую я описал выше.

3
Tadeusz A. Kadłubowski

На ваш компьютер передается HTML (возможно, с CSS и JavaScript-кодом). CSS и JavaScript не отображаются сами по себе, поэтому вы не видите этих расширений. HTML - это контент для отображения, поэтому вы привыкли видеть расширение .html.

Теперь, кого волнует, был ли документ HTML написан вручную в Блокноте или динамически соединен с некоторыми программами, которые запускаются всего 0,1 секунды назад. Это без разницы.

PHP часто используется для создания HTML-документов на лету. Добавление расширения .php к документам HTML, созданным программой PHP, является обычным делом и не имеет большого значения. Конечный пользователь видит HTML-документ в браузере.

Веб-серверу нужна некоторая информация, как найти HTML-документ для обслуживания - читать HTML-документ, сделанный вручную, с диска? Создать один, запустив какую-нибудь программу PHP? Расширение .php можно использовать как подсказку. Это только вопрос конфигурации сервера.

Если вы заинтересованы в обслуживании Web с помощью Python, посмотрите на проект django

3
hasen

Django, (вероятно) самая популярная инфраструктура для создания веб-приложений / веб-сайтов на python, использует отображение url для функций python, поэтому при запросе /url/он на самом деле вызовет функцию, назначенную для обработки запросов к этому URL. Другими словами, между URL и файлами .py нет сопоставления 1: 1.

Обновление (за комментарий):

На типичном php-сайте URL-адрес будет выглядеть примерно так, /path/to/file.phpи по этому запросу веб-сервер запускает php-файл и возвращает его вывод в виде HTTP-ответа .

В Django URL-адрес формы /path/of/url/перехватывается платформой, он на самом деле не соответствует ни одному файлу, это простая часть HTTP-запроса, а фреймворк Django имеет механизм диспетчеризации URL- адресов, который отображает URL-адрес на обычный функция. Если он находит функцию, назначенную для обработки этого типа URL, он вызывает ее и возвращает Http-ответ, который вернула функция.

http://docs.djangoproject.com/en/dev/topics/http/urls/

** Знаете ли вы какой-нибудь видео / гид / пример кода, который демонстрирует вашу точку зрения на сопоставление 1 к 1? ** Я хотел бы узнать, что вы имеете в виду. Léo Léopold Hertz 준영 14 лет назад 0
2
Loïc Wolff

Здесь вы можете видеть, что Google оставляет расширение .py.

Спасибо, что указали на это! - Это до сих пор трудно понять, поскольку это не только в конце. Léo Léopold Hertz 준영 14 лет назад 0
1
Toby Allen

Не имеет прямого отношения к вашему вопросу, но не только веб-сайты создаются с помощью Python. Я полагаю, что весь движок ИИ для EVE online (космическая игра MMP) написан на Python.

1
Toby Allen

Также

Поиск в Google

Девятый результат http://schmidt.nuigalway.ie/cs103/python/graphics.py

Это, по крайней мере, один веб-сайт с файлом, который заканчивается на .py - возможно, их больше.

Это не веб-сайт: это опубликованный скрипт. Telemachus 14 лет назад 1
Это сайт: http://schmidt.nuigalway.ie/cs103/python/ Telemachus 14 лет назад 0
1
CesarB

Эта разница в основном вызвана тем, как отправляется запрос.

Веб-сайты, которые показывают расширение файла, в основном отправляются напрямую через файловую систему. Когда вы видите путь URL-адреса, например /example/index.php, веб-сервер переходит в exampleкаталог под корнем документа, открывает index.phpфайл и выполняет его содержимое (немного упрощая). Поскольку они проходят через файловую систему, они, как правило, используют целое имя файла, включая расширение.

Веб-сайты, которые не имеют расширения файла, в основном отправляются другим способом. Например, в Django есть (немного упрощая) таблица, отображающая URL-путь к коду, который будет обрабатывать запрос. Поскольку здесь нет связи между путем URL-адреса и путем к файловой системе, отображение может быть совершенно произвольным, и нет никаких причин добавлять «поддельное» расширение.

Есть исключения из первого случая; Например, mod_rewriteвы можете переназначить путь URL, легко скрывая любое расширение файла (это очень распространено).

Причина, по которой вы не часто видите первый случай с Python, заключается в том, что большинство людей используют веб-фреймворки при создании сайтов с Python, которые осуществляют свою собственную диспетчеризацию. Это также распространено даже в PHP ( Drupal - это обычная PHP-инфраструктура), но создание «автономных» страниц (без фреймворка) чаще встречается в PHP, чем в Python.