我试图在FTP服务器中保存文件。起初,我有this error,该链接也是最有用的例子。它在我当地工作,但在我将它部署到heroku之后,我不知道我改变了什么,但它停止了工作并抛出了这个错误:
Here is the ftp.py code,一个存在方法在线~200。有用的代码(如果需要,请说):
Installed Applications:
[...
'django.contrib.staticfiles',
'directorio.apps.myapp',
'django_cleanup',
'storages']
FTP_USER = os.environ['FTP_USER']
FTP_PASS = os.environ['FTP_PASS']
FTP_PORT = os.environ['FTP_PORT']
DEFAULT_FILE_STORAGE = 'storages.backends.ftp.FTPStorage'
FTP_STORAGE_LOCATION = 'ftp://' + FTP_USER + ':' + FTP_PASS + '@<server>:' + FTP_PORT
from app.ftp import FTPStorage
fs = FTPStorage()
def upload_path_handler(instance, filename):
return "{id_p}/{f}".format(id_p=instance.id, f=filename)
class Professor(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(max_length=75)
foto = models.ImageField(upload_to=upload_path_handler, null=True, blank=True, storage=fs)
cv = models.FileField(upload_to=upload_path_handler, null=True, blank=True, storage=fs)
class ProfessorForm(forms.ModelForm):
class Meta:
model = Professor
exclude = ['name']
def nuevo_profesor(request):
if request.method == 'POST':
pform = ProfessorForm(request.POST, request.FILES)
if pform.is_valid():
new_prof = pform.save()
return redirect('app:professor', new_prof.id)
NotImplementedError
Storage的子类必须提供exists()方法
请求方法:POST
Django版本:1.9.2
异常类型:NotImplementedError
异常值:Storage的子类必须提供exists()方法
异常位置:C:\ Users \ myuser \ Envs \ iepenv \ lib \ site-packages \ django \ core \ files \ storage.py in exists,第130行
Python可执行文件:C:\ Users \ myuser \ Envs \ iepenv \ Scripts \ python.exe
Python版本:3.4.3
Django版本:1.9.2
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ core \ handlers \ base.py&#34;在get_response中 149. response = self.process_exception_by_middleware(e,request)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ core \ handlers \ base.py&#34;在get_response中 147. response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ contrib \ auth \ decorators.py&#34;在_wrapped_view中 23. return view_func(request,* args,** kwargs)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ contrib \ auth \ decorators.py&#34;在_wrapped_view中 23. return view_func(request,* args,** kwargs)
文件&#34; C:\ Users \ myuser \ Desktop \ Cosas \ directorio \ iep \ directorio \ views.py&#34;在new_prof 305. new_prof = pform.save()
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ forms \ models.py&#34;在保存 451. self.instance.save()
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ base.py&#34;在保存 700. force_update = force_update,update_fields = update_fields)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ base.py&#34;在save_base中 728.更新= self._save_table(raw,cls,force_insert,force_update,using,update_fields)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ base.py&#34;在_save_table中 812. result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ base.py&#34;在_do_insert中 851. using = using,raw = raw)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ manager.py&#34;在manager_method中 122. return getattr(self.get_queryset(),name)(* args,** kwargs)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ query.py&#34;在_insert中 1039. return query.get_compiler(using = using).execute_sql(return_id)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py&#34;在execute_sql中 1059.对于sql,self.as_sql()中的params:
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py&#34;在as_sql中 1019.对于obj in self.query.objs
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py&#34;在 1019.对于obj in self.query.objs
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py&#34;在 1018. [self.prepare_value(field,self.pre_save_val(field,obj))for field in field]
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py&#34;在pre_save_val中 968. return field.pre_save(obj,add = True)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ fields \ files.py&#34;在pre_save中 311. file.save(file.name,file,save = False)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ db \ models \ fields \ files.py&#34;在保存 93. self.name = self.storage.save(name,content,max_length = self.field.max_length)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ core \ files \ storage.py&#34;在保存 53. name = self.get_available_name(name,max_length = max_length)
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ core \ files \ storage.py&#34;在get_available_name中 89.而self.exists(name)或(max_length和len(name)&gt; max_length):
文件&#34; C:\ Users \ myuser \ Envs \ iepvenv \ lib \ site-packages \ django \ core \ files \ storage.py&#34;在存在 130.引发NotImplementedError(&#39;存储的子类必须提供exists()方法&#39;)
异常类型:NotImplementedError at / 异常值:Storage的子类必须提供exists()方法
有什么想法?或者你能建议我采用其他方法吗?
答案 0 :(得分:0)
解决!
Due to an issue,我在ftp.py中添加了一个@deconstructible类装饰器,我没有正确添加它。我在代码的末尾添加了the example function explained here,但装饰器必须在“类FTPStorage(存储)”之前编写,(ftp.py中的第31行我链接到原帖)。