为此,您必须执行以下操作。如果您不知道“选项”和“参数”是什么,请阅读optparse background。
每个“命令”或“请求”实际上都是模型的一个实例。使用某人可能提供的所有参数定义您的请求模型。
对于简单的选项,您必须提供一个包含特定 CHOICES 列表的字段。对于“开”或“关”的选项(命令行中的-x),您应该提供一个 CHOICE 列表,其中包含两个人类可理解的值(“Do X”和“Do not do X”。)
对于具有值的选项,您必须提供一个接受选项值的字段。您必须编写一个带有此字段验证的表单。稍后我们将返回选项值验证。
对于参数,您有第二个模型(第一个模型带有 FK)。这可能与单个 FilePath 字段一样简单,也可能更复杂。同样,您可能还必须提供一个表单来验证此模型的实例。
选项验证因选项类型而异。您必须将可接受的值缩小为尽可能窄的字符集,并编写一个绝对确定只传递有效字符的解析器。
您的选项将属于与 optparse 中的选项类型相同的类别——string、int、long、choice、float 和 complex。请注意,int、long、float 和 complex 已经由 Django 的模型和表单定义了验证规则。 Choice 是一种特殊的字符串,已经被 Django 的模型和表单支持。
剩下的是“字符串”。定义允许的字符串。为这些字符串编写一个正则表达式。使用正则表达式进行验证。大多数时候,您永远不能接受任何形式的引号("、' 或 `)。
最后一步。您的模型有一个方法可以将命令作为字符串序列发出,所有这些都准备好用于subprocess.Popen。
编辑
这是我们应用程序的支柱。这很常见,我们有一个带有多个表单的模型,每个表单都用于运行一个特殊的批处理命令。该模型非常通用。表单是构建模型对象的非常具体的方法。这就是 Django 设计的工作方式,它有助于适应 Django 深思熟虑的设计模式。
任何“可用作开放文本字段”的字段都是错误的。每个“打开”的字段都必须有一个正则表达式来指定允许的内容。如果你不能正式化一个正则表达式,你必须重新考虑你在做什么。
不能用正则表达式约束的字段绝对不能是命令行参数。时期。在使用之前,它必须存储到文件到数据库列中。
编辑
像这样。
class MySubprocessCommandClass( models.Model ):
myOption_1 = models.CharField( choice = OPTION_1_CHOICES, max_length=2 )
myOption_2 = models.CharField( max_length=20 )
etc.
def theCommand( self ):
return [ "theCommand", "-p", self.myOption_1, "-r", self.myOption_2, etc. ]
您的表单是该模型的 ModelForm。
您不必save() 模型的实例。我们保存它们,以便我们可以创建一个准确记录运行内容的日志。