Django - 模板上的 Pysftp 身份验证错误

Django - Pysftp authentication error on template

我正在尝试解决这个问题,但不知道如何解决。

我正在使用 pysftp 开发 Django。问题是如果一切正常,什么也不会发生,但是如果我输入了错误的 hostusuarioclave。如果我在输入错误的 hostusuario 或 [=14 时打开 Django 控制台,我仍然得到 Success 而不是 Error. Something Failed.Authentication Failed =]. 我怎样才能让它在两个地方都出现 Authentication failed 错误? Django 控制台和 Django webapp? 谢谢..!!

这是我的:

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
            try:
                SFTP_bajar(host,usuario,clave)
                messages.success(request,' Success')
                return redirect('auth_login')
            except:
                messages.error(request, 'Error. Something Failed.')
    else:
        form=sftpForm()
    return render(request, 'sftp.html', {'form':form})

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

        remotepath= 'myremotepath'
        localpath="mylocalpath"

        print ('\n' + 'Success')

    except Exception, e:
        print str(e)

不要在 SFTP_bajar

中捕获任何异常
def SFTP_bajar(host,usuario,clave):
    transferencia = sftp.Connection(host=host, username=usuario, password=clave)

    remotepath= 'myremotepath'
    localpath="mylocalpath"

    print ('\n' + 'Success')
    # here do whatever you have to do on your sftp server

然后在您的 sftp_form 视图中更改捕获异常的方式。你必须永远不要做的一件事是像你正在做的那样捕获广泛的异常并忽略它。抓住特定的。

        from pysftp import AuthenticationException

        try:
            SFTP_bajar(host,usuario,clave)
            messages.success(request,' Success')
            return redirect('auth_login')
        except AuthenticationException:
            messages.error(request, 'Authentication failed')
        except :
            import traceback
            traceback.print_exc()