Python - Django Обмен файлами между двумя аутентифицированными пользователями - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над проектом с использованием 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}'

Любая идея реализовать обмен файлами как доставку между двумя аутентифицированными пользователями?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2019

Существует множество способов реализовать это.

Вы можете просто добавить поле для пользователей, которые имеют доступ к файлу, и позволить им загружать файл всякий раз, когда они просят о загрузке, если они аутентифицированы, и ониразрешено загружать этот конкретный файл.

С вашей моделью вы можете сделать что-то вроде этого:

Поле Giving gig - это ваш файл, который вы можете создать слаг или в основномлюбую ссылку для файла, и когда пользователь щелкнет по нему, вы можете получить все заказы для этого пользователя, а затем проверить файлы, доступ к которым предоставлен с этими заказами, и если файл, который пользователи запрашивают для загрузки, является одним из них, просторазрешите ему загрузить его.

Вы можете позволить пользователю загрузить файл, используя X-Sendfile, который поможет вам проверить, разрешено ли пользователям загружать файл или нет. Пример здесь для 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.

Вы можете проверить срок годности и все виды вещей там.

...