Просмотр исходного кода

file.file_id use UUIDField instead AutoField
more secure file storage name

ignatz 4 лет назад
Родитель
Сommit
6c53f1beab
1 измененных файлов с 14 добавлено и 6 удалено
  1. 14 6
      file/models.py

+ 14 - 6
file/models.py

@@ -1,7 +1,10 @@
+import uuid
+
 from django.db import models
 from django.db import models
 from folder.models import Folder
 from folder.models import Folder
 from account.models import User
 from account.models import User
 from group.models import Group
 from group.models import Group
+from django.conf import settings
 # 引入内置信号
 # 引入内置信号
 from django.db.models.signals import post_delete
 from django.db.models.signals import post_delete
 # 引入信号接收器的装饰器
 # 引入信号接收器的装饰器
@@ -14,17 +17,17 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 # 文件表
 # 文件表
 class File(models.Model):
 class File(models.Model):
     # 文件id
     # 文件id
-    file_id = models.AutoField(primary_key=True)
+    file_id = models.UUIDField(primary_key=True, default=uuid.uuid4, auto_created=True, editable=False)
     # 文件名
     # 文件名
     file_name = models.CharField(max_length=50, blank=False)
     file_name = models.CharField(max_length=50, blank=False)
     # 从属的文件夹
     # 从属的文件夹
     father_folder = models.ForeignKey(Folder, on_delete=models.CASCADE, related_name='children_files')
     father_folder = models.ForeignKey(Folder, on_delete=models.CASCADE, related_name='children_files')
     # 上传时间
     # 上传时间
-    update_time = models.DateTimeField()
+    upload_time = models.DateTimeField(auto_now=True, editable=False)
     # 文件类型
     # 文件类型
     file_type = models.CharField(max_length=32)
     file_type = models.CharField(max_length=32)
     # 文件大小
     # 文件大小
-    file_size = models.CharField(max_length=16)
+    # file_size = models.CharField(max_length=16)
 
 
     key = models.CharField(max_length=1024)
     key = models.CharField(max_length=1024)
 
 
@@ -32,16 +35,21 @@ class File(models.Model):
 
 
     group = models.ForeignKey(Group, on_delete=models.DO_NOTHING, related_name='files', null=True)
     group = models.ForeignKey(Group, on_delete=models.DO_NOTHING, related_name='files', null=True)
 
 
+    def get_path(self):
+        return '/'.join([settings.MEDIA_ROOT, self.file_id, self.file_name])
+
     def to_json(self):
     def to_json(self):
         return {'file_id': self.file_id,
         return {'file_id': self.file_id,
                 'file_name': self.file_name,
                 'file_name': self.file_name,
                 'father_folder_id': self.father_folder_id,
                 'father_folder_id': self.father_folder_id,
-                'update_time': self.update_time,
+                'upload_time': self.upload_time,
                 'file_type': self.file_type,
                 'file_type': self.file_type,
-                'file_size': self.file_size}
+                # 'file_size': self.file_size,
+                'key': self.key,
+                'file': 'file'}
 
 
 
 
 # 信号接收函数,每当删除file时自动删除文件
 # 信号接收函数,每当删除file时自动删除文件
 @receiver(post_delete, sender=File)
 @receiver(post_delete, sender=File)
 def delete_file(sender, instance, **kwargs):
 def delete_file(sender, instance, **kwargs):
-    os.remove(BASE_DIR + '/' + str(instance.file_id))
+    os.remove(instance.get_path())