2017-01-30 158 views
1

我需要你的帮助,请,Django的 - 从一个函数变量传递到另一个

我与pysftp工作,这是伟大的工作,但现在我试图让它工作,我的项目Django工作伟大的控制台,但我想从form获得数据,所以我不需要使用console来做到这一点。

这里是我的观点:

def sftp_form(request): 
    if request.method == 'POST': 
     form = sftpForm(request.POST or None) 
     if form.is_valid(): 
      data = form.cleaned_data 
      host = data['host'] 
      usuario = data['usuario'] 
      clave = data['clave'] 
      print host 
      print usuario 
      print clave 
    else: 
     form=sftpForm() 
    return render(request, 'sftp.html', {'form':form}) 


def SFTP_subir(): 
    host = raw_input('ingrese el host: ') # I want form's host here. 
    usuario = raw_input('ingrese el usuario: ')# I want form's usuario here. 
    clave = raw_input('ingrese la clave: ')# I want form's clave here. 
    try: 
     transferencia = sftp.Connection(host=host, username=usuario, password=clave) 

     remotepath= 'remotepath' 
     localpath="mylocalpath" 

     transferencia.put(localpath,remotepath) 

     print ('\n' + 'Sucess.') 

    except Exception, e: 
     print str(e) 

,你可以在我的代码sftp_subir()看到它的要求我的主机,从控制台usuario也劈好,但我想,使其与sftp_form()主机,usuario也劈好工作。

+0

您不能修改您的方法的签名? – Sayse

+0

嗨,你是什么意思?基本上我只是需要从一个函数到另一个主机的变量@Sayse – User100696

+2

那么逻辑解决方案似乎只是作为函数参数传递你需要的值,所以你不能这样做? – Sayse

回答

0

在你看来:

def sftp_form(request): 
    if request.method == 'POST': 
     form = sftpForm(request.POST or None) 
     if form.is_valid(): 
      data = form.cleaned_data 
      host = data['host'] 
      usuario = data['usuario'] 
      clave = data['clave'] 
      print host 
      print usuario 
      print clave 
      SFTP_subir(host, usuario, clave) # here you invoke the function, passing variables as arguments 
    else: 
     form=sftpForm() 
    return render(request, 'sftp.html', {'form':form}) 

然后重构你的函数接收这些PARAMS:

def SFTP_subir(host, usuario, clave): 
    try: 
     transferencia = sftp.Connection(host=host, username=usuario, password=clave) 

     remotepath= 'remotepath' 
     localpath="mylocalpath" 

     transferencia.put(localpath,remotepath) 

     print ('\n' + 'Sucess.') 

    except Exception, e: 
     print str(e) 
1

这里似乎有点混淆,你不能在django网络应用中使用raw_input。如果您使用Django as a CLI,则无法使用HTTP请求。作为@sayse的意见建议,如果你是在一个Web应用程序使用视图,所有你需要做的就是确定你的第二个功能是一个接受paramers

def sftp_form(request): 
    if request.method == 'POST': 
     form = sftpForm(request.POST or None) 
     if form.is_valid(): 
      data = form.cleaned_data 
      host = data['host'] 
      usuario = data['usuario'] 
      clave = data['clave'] 
      SFTP_subir(hosts, usuario,clave) 

    else: 
     form=sftpForm() 
    return render(request, 'sftp.html', {'form':form}) 


def SFTP_subir(hosts, usuario,clave): 
    try: 
     transferencia = sftp.Connection(host=host, username=usuario, password=clave) 

     remotepath= 'remotepath' 
     localpath="mylocalpath" 

     transferencia.put(localpath,remotepath) 

     print ('\n' + 'Sucess.') 

    except Exception, e: 
     print str(e) 

一旦你做出这个代码,你仍然有要走很长的路,因为您的SFTP方法不会返回任何有用的响应。

+0

很好解释,更好的不可能。按预期工作。多谢先生! – User100696

-1

你可以做

sftp.connect(...) 
... 
<4 lines following> 

将request.method里面== “POST” 块,而不是你的打印语句。

相关问题