4

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

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

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

9 ответов9

17

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

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

8

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

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

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

4

Обычно к 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

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

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

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

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

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

3

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/

2

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

1

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

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

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

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

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

1

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

1

Также

Поиск в Google

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .