我有一个简单的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
解决此问题的最佳方法是什么?
编辑:为清楚起见,我正在尝试保护上传的文件,以便只有属于该对象的人才能访问它。
谢谢。
艾哈迈德。