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)
试图让我的django网络应用程序执行带有参数的python命令行应用程序。不确定这是否是最好的解决方法?如果没有,那么任何建议都很好。尝试通过Web表单从用户那里获取输入并将其用作执行cmd应用程序的参数。
帮助会很棒
谢谢威廉
如果要在每个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])
根据文档,我还修复了函数声明以获取实例。
另一件事:您的__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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句