Django执行cmd应用程序

Lin*_*ill 6 python django

from django.db import models
import os
from django.db.models.signals import post_save
import sys

class Form(models.Model):
    site = models.CharField(max_length=50)
    num = models.CharField(max_length=10)
    octet = models.CharField(max_length=30)

    def __unicode__(self):
        return self.site
        return self.num
        return self.octet

def create_conf(sender, **kwargs):
    os.system("/usr/local/build " + self.site + ' ' + self.num + ' ' + self.octet)

post_save.connect(create_conf, sender=Form)
Run Code Online (Sandbox Code Playgroud)

试图让我的django Web应用程序执行带参数的python命令行应用程序.不确定这是否是绕过它的最好方法?如果没有任何建议会很好.尝试通过Web表单从用户获取输入,并将其用作执行cmd应用程序的参数.

帮助太棒了

谢谢威廉

Max*_*ant 4

save()如果您想在每个对象上执行命令,这似乎是一个好方法。

但是,您应该清理您的输入:如果用户设置一些特殊字符(,;&例如),它可能会破坏您的命令,并且可能会给您的系统带来风险(例如,八位字节&& rm -rf /*在这里可能很有趣:p)。您应该看看这个用于保护参数的答案:Popen

from subprocess import Popen  

def create_conf(sender, instance, **kwargs):
     p1 = Popen(["/usr/local/build", instance.site, instance.num, instance.octet])
Run Code Online (Sandbox Code Playgroud)

根据文档,我还修复了函数声明以获取实例。

另一件事:你的__unicode__函数不正确,你不能像这样返回 3 个值。

class Form(models.Model):
    site = models.CharField(max_length=50)
    num = models.CharField(max_length=10)
    octet = models.CharField(max_length=30)

    def __unicode__(self):
        return "%s %s %s" % (self.site, self.num, self.octet)
Run Code Online (Sandbox Code Playgroud)