小编Sar*_*ius的帖子

使用 SFTP 的 Django 存储:GET 请求失败

我正在尝试使用 django-storages使用 SFTP访问我的“Hetzner”存储盒( https://www.hetzner.com/storage/storage-box),它应该保存媒体数据,即我的网站用户可以访问的图像文件动态上传。

我的文件的相应部分settings.py如下所示:

DEFAULT_FILE_STORAGE = 'storages.backends.sftpstorage.SFTPStorage'
SFTP_STORAGE_HOST = 'username.your-storagebox.de'
SFTP_STORAGE_ROOT = '/media'

SFTP_STORAGE_PARAMS = {
'username': 'username',
'password': 'password',
'allow_agent': False,
'look_for_keys': False,
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当用户上传图像时,它被放置在存储空间上,我可以使用 SFTP 确认。但从存储盒获取图像失败,没有图像显示。控制台摘录:

[03/Sep/2021 22:34:01] "GET /media/filename.jpg HTTP/1.1" 404 1962
Run Code Online (Sandbox Code Playgroud)

我可以发现 Django 仍在我的内部查找MEDIA_DIR文件。再次,我的设置的相应部分:

MEDIA_DIR = 'media'
MEDIA_ROOT = os.path.join(BASE_DIR, MEDIA_DIR)
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

简而言之:使用 SFTP 似乎可以将文件存储到存储中,但再次获取它们却失败了。

编辑:根据要求,我将提供更多代码片段 models.py::

class SizeRestrictedImageField(ImageField):

    def __init__(self, *args, **kwargs):
        self.max_upload_size = kwargs.pop('max_upload_size', 0)
        super().__init__(*args, **kwargs)

    def clean(self, *args, **kwargs):
        data = super().clean(*args, …
Run Code Online (Sandbox Code Playgroud)

django sftp django-storage python-django-storages

5
推荐指数
1
解决办法
1839
查看次数

Django 模型 - 循环导入问题

我的 Django 项目使用三个应用程序,chat, user, sowi. 每个应用程序都有按以下方式构造的模型。启动服务器时出现错误,我认为这是因为我有循环导入。我该如何解决这个问题?

聊天/models.py

from user.models import User

class Chat(models.Model):
    name = models.CharField(max_length=100, default="private")


class Message(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    receiver = models.ForeignKey(Chat, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

用户/模型.py

from chat.models import Chat
from sowi.models import Sowi

class User(AbstractUser):
    chats = models.ManyToManyField(Chat, blank=True)
    subscriptions = models.ManyToManyField(Sowi, related_name="subscriptions", blank=True)
    memberships = models.ManyToManyField(Sowi, related_name="memberships", blank=True)
    blocked = models.ManyToManyField("self", related_name="blocked", blank=True)
Run Code Online (Sandbox Code Playgroud)

sowi/models.py

from chat.models import Chat, Message
from user.models import User

class Sowi(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    chat = models.OneToOneField(Chat, blank=True, null=True, …
Run Code Online (Sandbox Code Playgroud)

python sqlite django django-models python-3.x

0
推荐指数
1
解决办法
2865
查看次数