вызов функции с cherry.py - PullRequest
       20

вызов функции с cherry.py

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

Так что я немного занимаюсь веб-разработкой, и из-за некоторых ограничений, установленных моим работодателем, мне нужно использовать гепарда и вишневого дерева.У меня есть эта форма, которая при отправке запускает функцию, и из указанной функции я вызываю другую через HTTPRedirect, и я хочу, чтобы она вызывалась без перенаправления.Вот пример

@cherrypy.expose
def onSubmit(**kwargs):
  ##Do something
  ##Do something
  ##Do something

  raise cherrypy.HTTPRedirect("/some_other_location/doSomethingElse?arg1=x&arg2=y")

Теперь я хочу сделать больше вещей после запуска второй функции, но я не могу, потому что, поскольку я перенаправить код, на этом заканчивается.Итак, мой вопрос, есть ли способ запустить эту другую функцию и не перенаправлять, но все еще используя HTTP.В javascript я бы использовал AJAX и передал ему URL, сохраняя вывод переменной loader, но я не уверен, как это сделать с cherrypy

1 Ответ

2 голосов
/ 12 января 2012

Вместо перенаправления используйте одну из стандартных библиотек Python для извлечения данных HTTP:

или другие, возможно, более приятные сторонние:

Кроме того, не забудьте преобразовать относительный URL-адрес в абсолютный URL-адрес, даже если это localhost:

Чтобы помочь вам начать работу, приведен фрагмент непроверенного кода, полученный из вашего примера с использованием urllib2:

import urllib2

@cherrypy.expose
def onSubmit(**kwargs):
  ##Do something
  ##Do something
  ##Do something

  url = "http://localhost/some_other_location/doSomethingElse?arg1=x&arg2=y"

  try:
    data = urllib2.urlopen(url).read()
  except urllib2.HTTPError, e:
    raise cherrypy.HTTPError(500, "HTTP error: %d" % e.code)
  except urllib2.URLError, e:
    raise cherrypy.HTTPError(500, "Network error: %s" % e.reason.args[1])

  ##Do something with the data
...