通过API发送函数实例(django)

时间:2016-08-13 06:21:53

标签: python function instance django-apps

也许是一个愚蠢的问题:) 我有两个Django应用程序, 我需要其中一个使用另一个的功能而不导入它们。 好像我正在使用API​​请求它们,有没有办法可以获得一个函数的实例并使用它,我不想做以下事情:

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

我想要做这样的事情

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

并执行以下功能

data = function()

感谢

1 个答案:

答案 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来获得您想要的结果,而不是传递函数。