Django storages FTP NotImplementedError(exists方法)

2024-10-03 19:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在FTP服务器中保存文件。一开始,我有this error,这个链接作为最小的例子也很有用。它在本地对我有用,但在我将其部署到heroku上后,我不知道我做了什么更改,但它停止工作并抛出以下错误:

未实现错误位于/app/new prof

存储的子类必须提供exists()方法

Here is the ftp.py code,exists方法位于~200行。有用的代码(如果需要,可以这样说):

在设置.py在

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

在模型.py在

^{pr2}$

在表单.py在

class ProfessorForm(forms.ModelForm):
  class Meta:
      model = Professor
      exclude = ['name']

在视图.py在

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

subclasses of Storage must provide an exists() method

Request Method: POST

Request URL: http://127.0.0.1:8000/

Django Version: 1.9.2

Exception Type: NotImplementedError

Exception Value: subclasses of Storage must provide an exists() method

Exception Location: C:\Users\myuser\Envs\iepenv\lib\site-packages\django\core\files\storage.py in exists, line 130

Python Executable: C:\Users\myuser\Envs\iepenv\Scripts\python.exe

Python Version: 3.4.3

Django Version: 1.9.2

完全回溯

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\core\handlers\base.py" in get_response 149. response = self.process_exception_by_middleware(e, request)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\core\handlers\base.py" in get_response 147. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 23. return view_func(request, *args, **kwargs)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 23. return view_func(request, *args, **kwargs)

File "C:\Users\myuser\Desktop\Cosas\directorio\iep\directorio\views.py" in new_prof 305. new_prof = pform.save()

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\forms\models.py" in save 451. self.instance.save()

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\base.py" in save 700. force_update=force_update, update_fields=update_fields)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\base.py" in save_base 728. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\base.py" in _save_table 812. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\base.py" in _do_insert 851. using=using, raw=raw)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\manager.py" in manager_method 122. return getattr(self.get_queryset(), name)(*args, **kwargs)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\query.py" in _insert 1039. return query.get_compiler(using=using).execute_sql(return_id)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql 1059. for sql, params in self.as_sql():

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\sql\compiler.py" in as_sql 1019. for obj in self.query.objs

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\sql\compiler.py" in 1019. for obj in self.query.objs

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\sql\compiler.py" in 1018. [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\sql\compiler.py" in pre_save_val 968. return field.pre_save(obj, add=True)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\fields\files.py" in pre_save 311. file.save(file.name, file, save=False)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\db\models\fields\files.py" in save 93. self.name = self.storage.save(name, content, max_length=self.field.max_length)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\core\files\storage.py" in save 53. name = self.get_available_name(name, max_length=max_length)

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\core\files\storage.py" in get_available_name 89. while self.exists(name) or (max_length and len(name) > max_length):

File "C:\Users\myuser\Envs\iepvenv\lib\site-packages\django\core\files\storage.py" in exists 130. raise NotImplementedError('subclasses of Storage must provide an exists() method')

Exception Type: NotImplementedError at / Exception Value: subclasses of Storage must provide an exists() method

有什么想法吗?或者你能建议我其他的方法吗?在


Tags: djangoinpyselfdbmodelssavelib
1条回答
网友
1楼 · 发布于 2024-10-03 19:20:35

解决了!在

Due to an issue,我在ftp.py文件,但我没有正确添加。我在代码的末尾添加了the example function explained here,但是decorator必须写在“类FTPStorage(Storage)”(在ftp.py文件我在原帖子中链接)。在

相关问题 更多 >