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

Поэтому я занимаюсь веб-разработкой, и из-за некоторых ограничений, установленных моим работодателем, мне нужно использовать гепарда и вишневого дерева. У меня есть эта форма, которая при отправке запускает функцию, и из указанной функции я вызываю другую через 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, сохраняя выходные данные в переменной загрузчика, но я не уверен, как это сделать с cherrypy

1 ответ

Решение

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

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

Кроме того, не забудьте преобразовать относительный 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
Другие вопросы по тегам