python - django 设置自定义文件保存路径
Posted Q
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - django 设置自定义文件保存路径相关的知识,希望对你有一定的参考价值。
一。 settings.py
MEDIA_URL = "/qir/" # 设置获取文件时的访问根路径 MEDIA_ROOT = os.path.join(BASE_DIR, "FileRoot") # 设置文件存储在项目的根路径(MEDIA_ROOT 是固定值,不可更改)
二。 models.py
class MyFiles(models.Model): my_files_path = PathAndRename("my_files") # 该表的文件存储路径
file = models.FileField(verbose_name="文件", null=True)
三。 自定义一个创建表文件夹的类
from django.utils.deconstruct import deconstructible from django.utils import timezone from django.conf import settings import os @deconstructible class PathAndRename(object): def __init__(self, sub_path): self.path = sub_path # 要创建的文件夹名称 self.full_path = "%s/%s" % (settings.MEDIA_ROOT, sub_path) # 拼接 settings 中设置的根目录 if not os.path.exists(self.full_path): # 拼接的路径是否被创建 os.makedirs(self.full_path) def __call__(self, instance, filename): ext = filename.split(‘.‘)[-1] t = timezone.now().strftime(‘%Y%m%d%H%M%S%f‘) if instance.pk: filename = ‘{}-{}.{}‘.format(instance.pk, t, ext) else: filename = ‘{}.{}‘.format(t, ext) return os.path.join(self.path , filename)
四。 自定义一个保存文件的方法。
def save_image(files, path, user=None): if user: # 是否使用用户id作为文件存储路径 file_name = "%s/%s" % (path, user.id) if not os.path.exists(settings.MEDIA_ROOT+"/"+file_name): # 没有该路径则创建 os.makedirs(settings.MEDIA_ROOT+"/"+file_name) file_name = file_name+"/%s.%s" % (datetime.datetime.now().strftime("%Y%m%d%H%M%S%f"), files.name.split(".")[-1]) else: file_name = "%s/%s.%s" % (path, datetime.datetime.now().strftime("%Y%m%d%H%M%S%f"), files.name.split(".")[-1]) full_name = "%s/%s" % (settings.MEDIA_ROOT, file_name) with open(full_name, "wb+") as f: # 将文件存储到项目中 for chunk in files.chunks(): f.write(chunk) return file_name, full_name
五。 views.py ( 获取文件并存储 )
class FilesViews(APIView): def post(request, *args, **kwargs): file = request.FILES.get(‘file‘, None) file_name, full_name = save_image(file, MyFiles.my_files_path.path, request.user) MyFiles.objects.create(file=file_name) ...
六。 获取文件路径并返回前端。
class FilesViews(APIView): def get(request, *args, **kwargs): file_list = Myfiles.objects.all() # 获取所有文件 file_path_list = [] for file_obj in file_list: # 获取每个文件的存储路径 file_path_list.append(file_obj.file.path) ...
以上是关于python - django 设置自定义文件保存路径的主要内容,如果未能解决你的问题,请参考以下文章
通过django中间件和python魔法方法实现自定义session(通过文件存储session)