Jan*_*nis 0 python django reference function
在像芹菜这样的django应用程序中,您可以编写一个函数,将其放在特定文件夹(myFunc)中的文件(func.py)中.现在,您可以在django中创建一个Object,并引用此函数以由调度程序运行.
我不想写一个新的芹菜,我想知道用什么技术来完成这样的行为:运行一个由字符串/或CharField引用的函数.
简短的例子
文件夹结构:
myApp
---myFunc
-----func.py
-models.py
Run Code Online (Sandbox Code Playgroud)
func.py
def test():
print "foo"
Run Code Online (Sandbox Code Playgroud)
models.py
class RunAFunction(models.Model):
function = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
python manage.py shell
> from myApp.models import RunAFunction
> func = RunAFunction(function="test()")
> func.save()
Run Code Online (Sandbox Code Playgroud)
现在我想myFunc.func.test()和我的RunAFunction()班级一起跑.请不要告诉我,我需要使用eval();)
拆分最后.一个字符串以获取模块和函数名称,然后使用importlib和getattr()获取对象:
import importlib
modulename, funcname = string.rsplit('.', 1)
module = importlib.import_module(modulename)
function = getattr(module, funcname)
result = function()
Run Code Online (Sandbox Code Playgroud)
所以,如果string = 'myApp.myFunc.test',那么上面的代码分裂,要'modulename = 'myApp.myFunc'和funcname = 'test',然后调用importlib.import_module('myApp.myFunc'),并getattr(module, 'test')在结果上,让你的函数的引用,那则可以被调用.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |