Получить текущий запрошенный URL в Python без фреймворка - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь получить URL, который был запрошен в Python, без использования веб-фреймворка.

Например, на странице (скажем, /main/index.html) пользователь нажимает наURL, чтобы перейти к / main / foo / bar (/ foo / bar не существует).Затем Apache (с mod_wsgi) перенаправляет пользователя в PHP-скрипт в / main /, который затем получает URL-адрес и ищет в MySQL любые подходящие поля.Затем остальная часть поля возвращается.Это помогло в PHP:

$_SERVER["REQUEST_URI"];

Я бы предпочел не использовать PHP, поскольку становится все труднее поддерживать код PHP, в то время как структура базы данных постоянно меняется.

Я почти уверенЕсть лучший способ, и любое упоминание будет с благодарностью.Ради актуальности, возможно ли это вообще (получить запрошенный URL в Python)?Должен ли я просто использовать фреймворк, хотя это кажется довольно простым?

Заранее спасибо,

Jamie

Примечание: я не хочу использовать GET в целях безопасности.

Ответы [ 4 ]

7 голосов
/ 03 января 2012

Что ж, если вы запустите свою программу как скрипт CGI, вы можете получить ту же информацию в os.environ.Однако, если я правильно помню, REQUEST_URI как таковой не является частью стандарта CGI, и вам необходимо использовать os.environ['SCRIPT_NAME'], os.environ['PATH_INFO'] и os.environ['QUERY_STRING'] для получения эквивалентных данных.

Однако ясерьезно призываю вас увидеть некоторые легкие рамки, такие как пирамида.Обычный CGI с Python медленный и обычно просто боль в заднице.

1 голос
/ 06 января 2014

Когда я хочу получить URL вне какой-либо платформы, используя Apache2 и Mod_WSGI, я использую

environ.get('PATH_INFO')

внутри функции application ().

1 голос
/ 03 января 2012

В отличие от PHP, Python является языком общего назначения и не имеет встроенного.

Способ сбора этой информации зависит от решения для развертывания:

  • CGI (в основном Apache с mod_python, устарел): см. Решение @Antti Haapala
  • WSGI (большинство других решений для развертывания): см. Решение @gurney alex

Но вы будете сталкиваться с гораздо большими проблемами: перенос сеанса, управление URL-адресами, файлы cookie и даже простой анализ POST / GET. Все это нужно делать вручную, если вы не используете фреймворк.

Теперь, если вы чувствуете, что фреймворк излишний (но на самом деле невероятные инструменты, такие как Django того стоят), вы можете использовать микро-фреймворк, такой как bottle .

Микрофреймы, как правило, делают это тяжелым для вас, но без сложной настройки или дополнительных расширенных функций. Бутылка фактически имеет нулевую настройку и является одним файлом lib.

Привет, слово с бутылкой:

from bottle import route, run, request

@route('/hello/:name')
def index(name='World'):
    return '<b>Hello %s! You are at %s</b>' % (name, request.path)

run(host='localhost', port=8080)

request.path содержит то, что вы хотите, и если вы посетите http://127.0.0.1:8080/hello/you, вы получите:

Hello you! You are at /hello/you
0 голосов
/ 03 января 2012

При использовании mod_python, если я правильно помню, вы можете использовать что-то вроде:

from mod_python import util
def handler(request):    
    parameters = util.FieldStorage(request)
    url = parameters.get("url", "/")

См. http://www.modpython.org/live/current/doc-html/pyapi-util.html для получения дополнительной информации о модуле mod_python.util и классе FieldStorage (включаяпримеры)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...