2016-08-13 6 views
0

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

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

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

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

и выполнять функцию следующим

data = function() 

благодаря

+1

Можете ли вы уточнить, какую проблему более высокого уровня вы пытаетесь решить? Потому что я получаю это [Что такое проблема XY?] (Https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) зуд. – dhke

+0

У меня есть приложение, имеющее соединение с базой данных Я хочу, чтобы у других были эти привилегии –

+0

, просто используя одни и те же функции на первом –

ответ

0

Вы можете использовать модуль 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 для получения желаемых результатов, а не для передачи функций.