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 设置静态文件,static
django 设置静态文件,static 一.搜集静态文件 1.1 命令行查看 collectstatic guoguos-MacBook-Pro:mysite guoguo$ python mana ...
- loadrunner 场景设计-设置结果文件保存路径
场景设计-设置结果文件保存路径 by:授客 QQ:1033553122 Results->Results settings Results Name 结果文件夹名称 Directory 指定结果 ...
- django 设置静态文件,static 链接
这篇文章讲的django 静态static 文件设置,还可以,供参考 http://blog.csdn.net/sinat_21302587/article/details/74059078
- Linux下QQ的使用并手动设置QQ文件保存路径
一.背景&&目标 马化腾迟迟不肯做linux版本的QQ和微信,实在抠脚. 没有办法,要在linux上使用QQ,目前我找到最好的办法就是使用wine,然而wine这个杀千刀的又是个坑货, ...
- Python Django 之 静态文件存放设置
一.静态文件存放路径设置STATICFILES_DIRS 1.在django项目目录下面新建静态文件保存目录 2.在setting中添加相应寻找静态文件目录的配置 STATICFILES_DIRS=( ...
- python django web 端文件上传
利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...
- python如何导入自定义文件和模块全部方法
项目中想使用自定义python文件(本地代码) 有6种方式, 1.这种最简单,也可能最不实用,将你的外部文件放到跟需要调用外部文件的文件同一个包下,同一目录 folder------toinvoke. ...
- python如何导入自定义文件和模块$PYTHONHOME$\Lib\site-packages 方法
python 中如何引用自己创建的源文件(*.py)呢? 也就是所谓的模块. 假如,你有一个自定义的源文件,文件名:saySomething.py .里面有个函数,函数名:sayHello.如下图: ...
- Python - Django - ORM 自定义 char 类型字段
用 CharField 定义的字段在数据库中存放为 verchar 类型 自定义 char 类型字段需要下面的代码: class FixedCharField(models.Field): " ...
随机推荐
- [转帖]HashMap、HashTable、ConcurrentHashMap的原理与区别
HashMap.HashTable.ConcurrentHashMap的原理与区别 http://www.yuanrengu.com/index.php/2017-01-17.html 2017年1月 ...
- npm是干什么的(转)
原文:https://zhuanlan.zhihu.com/p/24357770 网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话 ...
- Git系列 —— github提交一个空目录
转载自github提交一个空目录 github默认不上传空目录,有的时候需要空目录来保持程序的结构. 两种场景 1.始终保持空目录,即时里面有文件,也全部忽略掉. 建立一个.gitignore文件放到 ...
- SpringBoot @EnableAutoConfiguration exclude属性失效
本文链接:https://blog.csdn.net/yuan_ren_sheng/article/details/81516779 在学习SpringBoot的时候,入了不少的坑.今天学习@Spri ...
- oracle 根据字段分组取第一条数据及rank函数说明
当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就行了,如图: 如:COMMANDID = 26的有两条,只取一条数据. sql语句: select * from(select SY ...
- Mybatis 复习
概述 mybatis 是一个用java编写的持久层框架, 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程,它使用了ORM思想实现了结果 集的封 ...
- Socker编程之UDP
一:socket简介 1. 不同电脑上的进程之间如何通信 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起! 在1台电脑上可以通过进程号(PID)来唯一标识一个进程,但是在网络中这是行不通的. ...
- ERP会计科目表初始化
2019会计科目表 一.资产类 顺序号 编号 会计科目名称 会计科目适用范围 顺序号 编号 会计科目名称 会计科目适用范围 1 1001 库存现金 38 1431 周转材料 建造承包商专用 2 100 ...
- 去世父亲在儿子手机中复活,这可能是最温暖的一个AI
美国青年James Vlahos的父亲不幸因病去世,但聊以慰藉的是,现在他每天还能和父亲聊天并收到回复,而且父亲在回复中的口吻与语气,就仿佛还「活着」一样. 这并不是恐怖片剧情,而是科技的魔幻力量:回 ...
- HTTP发展简史
HTTP发展简史 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的 ...