Возвращаемое значение всегда отсутствует в скрипте google-app-engine

Я использую следующий код для анализа URL-адреса в скрипте google-app-engine:

from urlparse import urlparse, parse_qs

def parse_url(url):
            parsed_url = urlparse(url)
            params = parse_qs(parsed_url.query)
            return params

class Handler(webapp2.RequestHandler):
     def get(self):      
        url = self.request.path_info
        params = parse_url(url)
        self.response.write(params) 

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

Есть идеи, почему это могло произойти?

1 ответ

Решение

self.request.path_info значение не является полным URL-адресом, который необходимо передать urlparse() для правильного извлечения параметров у него удаляются параметры запроса, поэтому у вас нет параметров. Он также не работает внутри обработчика, возможно, вы сделали некоторые дополнительные изменения, так как вы попробовали это.

Чтобы получить параметры, используя ваш parse_url() передать полный URL:

    url = self.request.url
    params = parse_url(url)

Но вы должны заметить, что все это довольно ненужно, webapp2 уже включен анализатор параметров, за исключением того, что он возвращает MultiDict. Из данных запроса:

Титулы

Словарь-подобный объект, объединяющий переменные GET и POST.

Все, что вам нужно сделать, это преобразовать его в реальный диктант, идентичный тому, который ваш parse_url() производит:

    self.response.write(dict(self.request.params))
Другие вопросы по тегам