2017-01-30 2 views
1

Passing ich einige Ihrer Hilfe benötigen bitte,Django - Variablen von einer Funktion auf eine andere

ich mit pysftp bin arbeiten diese große funktioniert, aber jetzt versuche ich es zu machen in Django zu meinem Projekt arbeiten gearbeitet Großartig in der Konsole, aber ich möchte die Daten von einer form bekommen, so dass ich nicht die console verwenden muss, um das zu tun.

hier ist meine Ansicht:

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) 

, wie Sie in meinem Code sehen sftp_subir() es fragt mich für Host, usuario und clave von der Konsole, aber ich möchte es mit sftp_form() Host, usuario und clave zu arbeiten.

+0

Sind Sie nicht in der Lage, die Signatur Ihrer Methode zu ändern? – Sayse

+0

Hallo, was meinst du? im Grunde brauche ich nur die Variable des Hosts von einer Funktion zur anderen @Sayse – User100696

+2

Nun, die logische Lösung scheint nur die Werte, die Sie als Funktionsargumente benötigen übergeben, also sind Sie nicht in der Lage, das zu tun? – Sayse

Antwort

0

Ihrer Ansicht:

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}) 

dann Ihre Funktion Refactoring, um diese params zu erhalten:

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

Es scheint hier eine leichte Verwechslung zu geben, Sie können raw_input in einer Django Web App nicht verwenden. Wenn Sie Django as a CLI verwenden, können Sie keine HTTP-Anfrage verwenden. Wie @sayse in den Kommentaren vorgeschlagen, wenn Sie einen Blick in eine Web-App verwenden alles, was Sie tun müssen, ist Ihre zweite Funktion zu definieren, eine, die 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) 

Sobald Sie diesen Code machen Sie noch akzeptiert haben ein langer Weg, da Ihre SFTP-Methode keine nützliche Antwort zurückgibt.

+0

Gut erklärt, besser unmöglich. Hat wie erwartet funktioniert. Vielen Dank, Herr! – User100696

-1

können Sie die

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

innerhalb des request.method == "POST" Block statt Ihrer Druckanweisungen tun.

Verwandte Themen