Python - Django在两个经过身份验证的用户之间共享文件

问题描述 投票:0回答:1

我正在开发一个使用Python(3.7)和Django(2.5)的项目,其中我正在构建一个类似于自由职业网站的应用程序,但是我在实施交付提交部分时遇到了困难。

用户将创建销售服务,然后买方将订购他的服务,之后卖方必须完成约定的工作并且需要将工作作为交付提交给买方。

交付将以文件的形式,可以是文本文件,图像文件,音频,视频或代码文件,问题是我不知道如何在Django中实现这个东西,所以用户可以以私有方式将文件发送给另一个用户,因此只有这两个用户都能够访问该文件。

这是我到目前为止,买家和卖家之间的订单:

class Order(models.Model):
    status_choices = (
        ('Active', 'Active'),
        ('Completed', 'Completed'),
        ('Late', 'Late'),
        ('Short', 'Short'),
        ('Canceled', 'Canceled'),
        ('Submitted', 'Submitted')
    )
    gig = models.ForeignKey('Gig', on_delete=models.CASCADE)
    seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name='selling')
    buyer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='buying')
    created_at = models.DateTimeField(auto_now=timezone.now())
    charge_id = models.CharField(max_length=234)
    days = models.IntegerField(blank=False)
    status = models.CharField(max_length=255, choices=status_choices)

    def __str__(self):
        return f'{self.buyer} order from {self.seller}'

有没有想过在两个经过身份验证的用户之间实现文件共享?

提前致谢!

python django python-3.x django-2.0
1个回答
0
投票

有很多方法可以实现这一点。

您只需为访问文件的用户添加一个字段,如果他们通过身份验证并允许他们下载该特定文件,则只要他们要求下载就可以下载该文件。

使用您的模型,您可以执行以下操作:

gig字段是您的文件,您可以创建一个slug或基本上任何文件的链接,当用户点击它时,您可以获得该用户的所有订单,然后检查已使用这些订单授予访问权限的文件以及是否用户请求下载的文件就是其中之一,只需让他下载即可。

您可以让用户使用X-Sendfile下载文件,它可以帮助您检查是否允许用户下载文件。 Example here on stackoverflow

示例代码:

def download_file_view(request, file_id):
    if not request.user:
        # Redirect user or ...
    if not request.user.is_authenticated:
        # Redirect user or ...

    # Check if this user has any orders with that file linked to it:
    if Order.objects.filter(buyer=request.user, gig__pk=file_id).exists():
        # User has bought this file already and the download should be allowed.

您可以检查到期日期和那里的各种事情。

© www.soinside.com 2019 - 2024. All rights reserved.