【问题标题】:Change script that is run on command line to run on a django request [duplicate]更改在命令行上运行的脚本以在 django 请求上运行 [重复]
【发布时间】:2014-04-20 07:16:14
【问题描述】:

我有一个脚本,我从命令运行以从 csv 填充 django 模型。 我使用的命令是:

python artifact_db_loader.py -tzusb "d:\Test_Data\david nides\david-nides-usb.csv" -e 44

如何更改它以在 django 视图上运行? 请问有哪位有见识的吗? 问候, 乔什

【问题讨论】:

    标签: django csv django-models django-views


    【解决方案1】:

    根据定义,Django 视图是一个接受请求对象作为第一个参数的可调用对象。如果你想重用那个 1-1,你需要先手动创建一个请求对象。

    但是,我强烈建议不要这样做。将通用代码重构为实用模块/函数,并从视图或命令行脚本中调用它。

    【讨论】:

      【解决方案2】:

      以编程方式调用管理命令:

      from django.core import management
      management.call_command('your_command')
      

      详情请参阅documentation

      【讨论】:

      • 谢谢 Dirk,在这种情况下“我的命令是我从上面的命令行运行的整个命令?”
      • 不,call_command 的第一个参数只是你的管理命令的名称。你的命令的参数是这样添加的:management.call_command('artifact_db_loader', 'arg', kwarg='abc')
      • 在我的情况下 python artifact_db_loader.py -tzusb "d:\Test_Data\david nides\david-nides-usb.csv" -e 44 我有 2 个参数,--tzusb(file_path) 和-e(44) 所以我应该通过它吧?
      • Dirk,尽管在我的项目中添加了一个包含它的模块,但我收到错误“未知命令 artifact_db_loader”..或者是否有另一种添加方法以便将其识别为命令?
      猜你喜欢
      • 2017-01-14
      • 2018-05-06
      • 2011-03-11
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2014-04-19
      • 1970-01-01
      相关资源
      最近更新 更多