繁体   English   中英

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

[英]Django - Passing variables from a function to another

我需要你的一些帮助,

我正在使用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()主机,usuario和clave一起使用。

这里似乎有轻微的混淆,你不能在django网络应用程序中使用raw_input 如果您使用Django作为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方法没有返回任何有用的响应。

在你看来:

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)

你可以做到

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

在request.method ==“POST”块内,而不是你的print语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM