Отправка экземпляра функции через API (django)

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

response = requests.get('HTTP://URL/example/', data)
data = response.json()

Я хочу вместо этого сделать что-то вроде этого

function = requests.get('HTTP://URL/example/')

и выполнить функцию следующим образом

data = function()

Спасибо

1 ответ

Решение

Ты можешь использовать marshal модуль для сериализации кода функции, добавления его в качестве содержимого запроса и десериализации в другом приложении.

In [13]: def foo(a, b):
   print a + b
  ....:

In [14]: import marshal

In [15]: a = marshal.dumps(foo.func_code)

In [16]: a

Out[16]:
'c\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00C\x00\x00\x00s\r\x00\x00\x00|\x00\x00|\x01\x00\x17GHd\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x01\x00\x00\x00at\x01\x00\x00\x00b(\x00\x00\x00\x00(\x00\x00\x00\x00s\x1f\x00\x00\x00<ipython-input-13-a0f238eac2f8>t\x03\x00\x00\x00foo\x01\x00\x00\x00s\x02\x00\x00\x00\x00\x01'

Другой переводчик:

In [13]: import marshal, types

In [14]: a = marshal.loads('c\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00C\x00\x00\x00s\r\x00\x00\x00|\x00\x00|\x01\x00\x17GHd\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x01\x00\x00\x00at\x01\x00\x00\x00b(\x00\x00\x00\x00(\x00\x00\x00\x00s\x1e\x00\x00\x00<ipython-input-1-a0f238eac2f8>t\x03\x00\x00\x00foo\x01\x00\x00\x00s\x02\x00\x00\x00\x00\x01')

In [15]: types.FunctionType(a, globals(), 'foo')(1, 2)
3

Однако вы должны убедиться, что никто не отправит вам вредоносный код перед его выполнением. Также обратите внимание, что у вас не будет доступа ни к каким глобальным переменным, которые определены в исходном модуле функции.

Вообще я бы не рекомендовал такой подход. Лучше просто использовать RestAPI для получения желаемых результатов, а не передавать функции.

Другие вопросы по тегам