从FileField运行{.py文件。

时间:2019-02-17 19:09:10

标签: django

我有一个包含FileField的模型。我用它上传.py文件。

models.py

class FileModel(models.Model):
    file = models.FileField(null = True, blank = True, upload_to = 'files')
    file_name = models.CharField(max_length=200)

我想检索上传的文件并在视图中执行代码。

views.py

def get_return_from_file(request):
    post = FileModel.objects.get(file_name__iexact='example_name')
    a = post.file.read()
    print (a)

示例上传的python文件“ example_name”

def main():
    return 'hello world'

if __name__ == "__main__":
    main()

但是返回

  

b'def main():\ n如果 name ==“ main ”:\ n main()'则返回'hello world'\ n >

代替

  

“ hello world”

如何执行FileField中的代码并访问它的返回值,而不是仅仅将其读取为字符串?

谢谢!

2 个答案:

答案 0 :(得分:0)

示例文件:

def main():
    return 'hello world'

if __name__ == "__main__":
    print(main())

views.py

def get_return_from_file(request):
    post = FileModel.objects.get(file_name__iexact='example_name')
    a = post.file.read()
    exec(a)

答案 1 :(得分:-1)

eval()用于单行表达式。

eval()仅返回表达式结果。

exec()用于语句,任何有效的python代码块。

文档:https://docs.python.org/3/library/functions.html