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): " ...
随机推荐
- Elasticsearch 记录
查看集群运行状态 GET /_cat/health?v 响应 1573460861 16:27:41 my-application yellow 1 1 372 372 0 0 371 0 - 50. ...
- 微信小程序路径表达式解析规则
小程序 setData 方法支持路径表达式来设置属性,例如 setData({"x.y.z": 1}). 微信官方没有公布路径表达式的语法规则及解析规则,本文所描述的路径表达式解析 ...
- 『Andrew and Chemistry 树同构』
Andrew and Chemistry Description During the chemistry lesson Andrew learned that the saturated hydro ...
- MySQL面试题及答案整理,史上最全!
原文链接:https://juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐 ...
- kafka Enabling Kerberos Authentication
CDK 2.0 and higher Powered By Apache Kafka supports Kerberos authentication, but it is supported onl ...
- mvc_1_ex_stu_manage
Mvc第一遍结束综合练习:带权限的学生管理系统程序的设计应该根据功能来进行.先来设想一下本练习的程序功能:学生信息管理.登录用户区分权限.出错应该给出提示.由此可以设想,完成以后的程序是下图的样子:主 ...
- HTML5深入学习之数据存储
概述 本来,数据存储都是由 cookie 完成的,但是 cookie 不适合大量数据的存储,cookie 速度慢且效率低. 现在,HMLT5提供了两种在客户端存储数据的办法: localStorage ...
- Sql Server设置用户只能查看并访问特定数据库
现需要限定特定的用户只能查看并访问特定的数据库,防止多个用户对数据库操作时一些误操作. 参考i6first的如何让用户只能访问特定的数据库(MSSQL)博文 1.新建登录用户 以管理员身份登陆数据库( ...
- 使用jmeter 设计流程发起测试
业务场景 需要实现用户在登录后,能够持续的发起流程. 需要注意的点: 1.使用不同的用户登录. 2.登录后发起可以持续的发起流程. 实现步骤 1.先使用badboy 录制脚本. 2.使用jmeter ...
- python调用C语言接口
python调用C语言接口 注:本文所有示例介绍基于linux平台 在底层开发中,一般是使用C或者C++,但是有时候为了开发效率或者在写测试脚本的时候,会经常使用到python,所以这就涉及到一个问题 ...