Django - 将变量从函数传递到另一个函数

时间:2017-01-30 14:31:49

标签: python 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和clave,但是我想让它与sftp_form() host,usuario和clave一起使用。

3 个答案:

答案 0 :(得分:1)

这里似乎有轻微的混淆,你不能在django网络应用中使用raw_input。如果您使用Django as a CLI,则无法使用HTTP请求。正如@sayse在评论中建议的那样,如果您在Web应用程序中使用视图,那么您需要做的就是将第二个函数定义为接受参数的函数

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方法没有返回任何有用的响应。

答案 1 :(得分: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})

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

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)

答案 2 :(得分:-1)

你可以做

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

在request.method ==&#34; POST&#34;阻止而不是打印报表。