2010-06-28 3 views
0

Я пытаюсь написать простую систему хранения данных.Пользовательская система хранения в Django

Мне нужно только то, чтобы моя система хранения дублировала файлы с нескольких FTP-серверов.

Подкласс хранения выглядит следующим образом:

from django.core.files.storage import Storage 
from settings import MEDIA_ROOT, MEDIA_URL 
import ftplib 
import os 



class FTPStorage(Storage): 
    """FTP Storage class for Django pluggable storage system.""" 

    def __init__(self, mediaroot=MEDIA_ROOT, base_url=MEDIA_URL): 
     self._netrc=open('netrc') 
     self._machine=[] 
     self._login=[] 
     self._password=[] 


def _save(self, name, content): 
    content.open() 
     if hasattr(content, 'chunks'): 
      content_str = ''.join(chunk for chunk in content.chunks()) 
     else: 
      content_str = content.read() 
     for line in netrc: #read netrc file 
      old=line.strip() 
      line=line.strip().split() 
      if old.startswith("machine"): machine.append(line[-1]) 
      if old.startswith("login"): login.append(line[-1]) 
      if old.startswith("password"): password.append(line[-1]) 
     for i in range(len(machine)): 
      try: 
       ftp = ftplib.FTP(machine[i]) 
       ftp.login(login[i],password[i]) 
      except Exception,e: 
       print e 
      else: 
       ftp.cwd("PublicFolder") 
       ftp.storbinary("STOR " + os.path.basename(name), StringIO(content_str), "rb", 8*1024) 
     return name 

Но теперь он дает мне ошибку:

line:20, in __init__
if hasattr(content, 'chunks'):
Name error: Global name is not defined.

Могу ли я просто написать метод _save, поэтому он будет работать?

ответ

0

Ваша проблема связана скорее с форматом вашего кода, а не с его логикой. То есть у вас есть синтаксические ошибки.

Сообщение об ошибке вы включили заявляет, что if hasattr(content, 'chunks'): линии происходит в методе __init__, который предполагает, что переводчик считает, что вы должны определить метод _save как функции в области видимости иницилизации метода. Ваш отступ, хотя и не совсем ясный здесь, на StackOverflow, кажется беспорядочным и может быть причиной этой путаницы. Python очень чувствителен к ошибкам отступов.

+0

Первый вопрос правильный, но второй нет. Выражение совершенно корректно - посмотрите [генераторные выражения] (http://www.python.org/dev/peps/pep-0289/). –

+0

Интересно, я как-то не знал выражений генератора. Я отредактировал свой ответ соответственно. –

Смежные вопросы