1

这是我的views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext
import subprocess

globalsource=0
def upload_file(request):
    '''This function produces the form which allows user to input session_name, their remote host name, username 
    and password of the server. User can either save, load or cancel the form. Load will execute couple Linux commands
    that will list the files in their remote host and server.'''

    if request.method == 'POST':    
        # session_name = request.POST['session']
        url = request.POST['hostname']
        username = request.POST['username']
        password = request.POST['password']

        globalsource = str(username) + "@" + str(url)

        command = subprocess.Popen(['rsync', '--list-only', globalsource],
                           stdout=subprocess.PIPE,
                           env={'RSYNC_PASSWORD': password}).communicate()[0]

        result1 = subprocess.Popen(['ls', '/home/'], stdout=subprocess.PIPE).communicate()[0]
        result = ''.join(result1)

        return render_to_response('thanks.html', {'res':result, 'res1':command}, context_instance=RequestContext(request))

    else:
        pass
    return render_to_response('form.html', {'form': 'form'},  context_instance=RequestContext(request))

    ##export PATH=$RSYNC_PASSWORD:/usr/bin/rsync

def sync(request):
    """Sync the files into the server with the progress bar"""
    finalresult = subprocess.Popen(['rsync', '-zvr', '--progress', globalsource, '/home/zurelsoft/R'], stdout=subprocess.PIPE).communicate()[0]
    return render_to_response('synced.html', {'sync':finalresult}, context_instance=RequestContext(request))

问题出在 sync() 视图中。不采用 upload_file 中的全局变量值,但在同步视图中采用 globalvariable=0。我究竟做错了什么?

编辑: 尝试这样做:

global globalsource = str(username) + "@" + str(url)

但是,我收到此错误:

SyntaxError at /upload_file/
invalid syntax (views.py, line 17)
Request Method: GET
Request URL:    http://127.0.0.1:8000/upload_file/
Django Version: 1.4.1
Exception Type: SyntaxError
Exception Value:    
invalid syntax (views.py, line 17)
4

2 回答 2

4

这是一个根本错误的方法。你不应该这样做。

所有请求都可以访问全局变量。这意味着完全不相关的用户将看到该变量的先前请求的值。鉴于您使用它来访问用户的数据,这是一个严重的安全风险。

您应该在会话中存储这样的元素。

于 2012-11-16T09:03:57.427 回答
1

如果您在函数中的任何位置分配给变量,Python 将该变量视为本地变量。因此,upload_file您不是在获得 global globalsource,而是在创建一个新的 local ,它在函数结束时被丢弃。

为了让 Python 即使在分配全局变量时也使用它,请在函数中添加一条global globalsource语句。upload_file

编辑:这不是您使用该global语句的方式。您需要在您的函数中执行此操作:

global globalsource
globalsource = str(username) + "@" + str(url)
于 2012-11-16T06:35:45.453 回答