Вызов функции с 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