显示上传文件之前检查其条件(保护上传文件)

时间:2019-12-15 23:42:49

标签: python django

我有一个简单的Django模型,如下所述:

class UploadedFile(models.Model):
    module = models.ForeignKey(Module, on_delete=models.CASCADE, null=False)
    uploaded_file = models.FileField(upload_to=file_upload_directory, validators=[ValidateUploadFileSize])

,我通过一个基于类的视图来处理文件的上传,效果很好。当用户上传文件时,它将成功上传到服务器目录。当用户通过锚标记访问文件时,URL看起来像http://127.0.0.1:8000/media/444131/module/24.pdf。我想知道的是,我如何根据确定是否显示文件的某些条件在打开文件之前 进行验证?

让我对此进行扩展。在URL http://127.0.0.1:8000/media/444131/中,444131是数据库中对象的ID。我希望能够检查当前用户是否属于该对象。如果用户存在于该对象中,则我想显示该文件,否则,我想进行某种重定向或不显示该文件。这是为了防止任何随机的人暴力破解URL或防止意外发现文件。

我一直在考虑使用中间件,但是我不确定这是否是正确的方法?我还尝试通过在urls.py文件中创建模式来匹配url,但这是行不通的。我面临的问题是在匹配模式之后,我无法实际显示文件。如果我确实显示了文件,则用户很可能可以使用这些URL并进入其他上传的文件。

我这样做的方式如下:

urls.py
--
 re_path(r'^(?P<id>\d+)/module/(?P<file_name>[\w.]{0,256})$', views.DisplayFile.as_view()),

views.py
--
class DisplayFile(LoginRequiredMixin, View):
    def get(self, request, *args, **kwargs):
        # Condition to check if the request.user can view or not.
        pass

解决此问题的最佳方法是什么?

编辑:为清楚起见,我正在尝试保护上传的文件,以便只有属于该对象的人才能访问它。

谢谢。
艾哈迈德。

0 个答案:

没有答案
相关问题