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

时间:2019-02-26 08:15:43

标签: python django python-3.x django-2.0

我正在使用Python(3.7)和Django(2.5)开发一个项目,其中正在构建一个类似于自由职业者网站的应用程序,但是在实现交付提交部分时我陷入了困境。< / p>

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

交付将以文件形式进行,可以是文本文件,图像文件,音频,视频或代码文件,问题是我不知道如何在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}'

有什么想法可以将文件共享实现为两个经过身份验证的用户之间的传递吗?

谢谢!

1 个答案:

答案 0 :(得分: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.

您可以在其中检查失效日期和各种事物。