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应用程序的参数.
帮助太棒了
谢谢威廉
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)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |