Django Manage File
default_storage
>>> from django.core.files.base import ContentFile
>>> from django.core.files.storage import default_storage
>>> path = default_storage.save('/path/to/file', ContentFile('new content'))
>>> path
'/path/to/file'
>>> default_storage.size(path)
11
>>> default_storage.open(path).read()
'new content'
>>> default_storage.delete(path)
>>> default_storage.exists(path)
False
The built-in filesystem storage class
from django.core.files.storage import FileSystemStorage
from django.db import models
fs = FileSystemStorage(location='/media/photos')
class Car(models.Model):
...
photo = models.ImageField(storage=fs)
django提供了一系列api用来处理ImageField对象和FileField对象
from django.db import models
class Car(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo = models.ImageField(upload_to='cars')
>>> car = Car.objects.get(name="57 Chevy")
>>> car.photo
<ImageFieldFile: chevy.jpg>
>>> car.photo.name
'cars/chevy.jpg'
>>> car.photo.path
'/media/cars/chevy.jpg'
>>> car.photo.url
'http://media.example.com/cars/chevy.jpg'
django提供了 django.core.files.File来代表一个file文件
大多数情况下,您将使用django提供的File类
>>> from django.core.files import File
# Create a Python file object using open()
>>> f = open('/path/to/hello.world', 'w')
>>> myfile = File(f)
现在你就可以使用django提供的File api了。以这种方式创建的文件不会自动关闭,以下方法可以用于关闭文件
>>> from django.core.files import File
# Create a Python file object using open() and the with statement
>>> with open('/path/to/hello.world', 'w') as f:
... myfile = File(f)
... myfile.write('Hello World')
...
>>> myfile.closed
True
>>> f.closed
True
File storage
在幕后,Django将决定如何以及在何处将文件存储到文件存储系统。这个对象实际上能够理解文件系统、打开和读取文件等内容。
Django的默认文件存储由DEFAULT_FILE_STORAGE设置提供;如果您没有显式地提供存储系统,那么将使用这个系统。
有关内置默认文件存储系统的详细信息,请参阅下面的“编写自定义存储系统”,了解如何编写自己的文件存储系统
Storage object
虽然在大多数情况下,您希望使用File对象(它将委托给该文件的适当存储),但是您可以直接使用文件存储系统。您可以创建某个自定义文件存储类的实例,或者(通常更有用)您可以使用全局默认存储系统
Storage object api
django提供了两种方便的方法使用当前storage class
class DefalutStorage
- DefaultStorage提供对DEFAULT_FILE_STORAGE定义的当前默认存储系统的延迟访问。
- DefaultStorage在内部使用get_storage_class()。
get_storage_class
- 返回实现存储API的类或模块。
- 在没有调用import_path参数get_storage_class时,将返回DEFAULT_FILE_STORAGE定义的当前默认存储系统。如果提供了import_path, get_storage_class将尝试从给定的路径导入类或模块,如果成功,将返回它。如果导入失败,将引发异常。
The FileSystemStorage class
class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)
文件系统存储类在本地文件系统上实现基本的文件存储。它从存储中继承并为其所有公共方法提供实现。
location
保存文件的目录的绝对路径。默认设置为MEDIA_ROOT设置的值
base_url
服务存储在此位置的文件的URL。默认为MEDIA_URL设置的值
file_permissions_mode
文件保存时将接收的文件系统权限。默认为FILE_UPLOAD_PERMISSIONS
directory_permissions_mode
保存目录时将接收的文件系统权限。默认为FILE_UPLOAD_DIRECTORY_PERMISSIONS。
get_created_time
返回系统的ctime的日期时间,即os.path.getctime()。在某些系统(如Unix)上,这是最后一次元数据更改的时间,而在其他系统(如Windows)上,这是文件的创建时间。
The Storage class
存储类为存储文件提供了标准化的API,以及所有其他存储系统可以根据需要继承或覆盖的一组默认行为。
delete(name)
删除按名称引用的文件。如果目标存储系统不支持删除,则会导致引起NotImplementedError
exists(name)
如果指定名称引用的文件已经存在于存储系统中,则返回True;如果新文件的名称可用,则返回False
get_accessed_time(name)
返回文件最后一次访问时间的日期时间。对于无法返回上次访问时间的存储系统,这将引起NotImplementedError。
如果USE_TZ为真,则返回一个感知的datetime,否则返回一个本地时区的普通datetime
get_available_name(name, max_length=None)
返回一个基于name参数的文件名,该参数是免费的,可用于在目标存储系统上写入新内容。
如果提供的话,文件名的长度将不会超过max_length。如果找不到免费的唯一文件名,就会引发可疑文件操作异常。
如果文件名已经存在,则在扩展名前附加一个下划线和一个随机的7个字母数字字符串
get_created_time(name)
返回文件创建时间的日期时间。对于无法返回创建时间的存储系统,这将引起NotImplementedError。
get_modified_time(name)
返回文件最后修改时间的日期时间。对于无法返回最后一次修改时间的存储系统,这将引起NotImplementedError。
get_valid_name(name)
返回一个基于名称参数的文件名,该参数适用于目标存储系统。
generate_filename(filename)
通过调用get_valid_name()来验证文件名,并返回要传递给save()方法的文件名。
filename参数可能包括FileField.upload_to返回的路径。在这种情况下,路径不会被传递给get_valid_name(),而是会被转回结果名。
默认实现使用os。路径的操作。如果该方法不适用于您的存储,请重写此方法
listdir(path)
列出指定路径的内容,返回一个列表的二元组;第一项是目录,第二项是文件。对于无法提供此类清单的存储系统,这将引发NotImplementedError。
open(name, mode='rb')
打开名称指定的文件。注意,虽然返回的文件被保证为file对象,但它实际上可能是某个子类。在远程文件存储的情况下,这意味着读/写可能相当慢,所以要注意
path(name)
可以使用Python的标准open()打开文件的本地文件系统路径。对于无法从本地文件系统访问的存储系统,这将引起NotImplementedError。
save(name, content, max_length=None)
使用存储系统保存新文件,最好指定名称。如果已经存在具有此名称名称的文件,存储系统可以根据需要修改文件名以获得唯一名称。存储文件的实际名称将被返回。
max_length参数传递给get_available_name()。
内容参数必须是django.core.files的实例。文件或可以包装在文件中的类文件对象。
size(name)
返回按名称引用的文件的总大小(以字节为单位)。对于无法返回文件大小的存储系统,这将引起NotImplementedError。
url(name)
返回URL,在这里可以访问按名称引用的文件的内容。对于不支持通过URL访问的存储系统,这将引起NotImplementedError。
Django Manage File的更多相关文章
- Python Django manage.py提供的命令及用法
λpython manage.pyType'manage.py help <subcommand>'for help on a specific subcommand. Available ...
- django manage.py 的各种功能
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...
- Django manage.py 命令详解
manage.py 查看命令的作用的语句 C:\Users\Administrator> python manage.py help Type 'manage.py help <subco ...
- Flask download file vs django download file
Only difference is make_response and httpresponse. FLASK VERSION: from flask import make_response @a ...
- Django初识
web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...
- 经过各种坑之后centos+ uwsgi + nginx +django 终于配好了
https://pypi.python.org/pypi/setuptools#downloads https://www.python.org/ftp/python/ 开机 加入 uwsgi ngi ...
- python Django 学习笔记(六)—— 写一个简单blog做增删改练手
简单效果图 1,创建一个项目myblog 可参考这里 myblog/ manage.py myblog/ __init__.py settings.py urls.py wsgi.py 2,创建blo ...
- [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)
1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 1. ...
- django 403问题
C:\Users\x\pyp1>python manage.py runserverPerforming system checks... System check identified no ...
随机推荐
- docker redis4.0 集群(cluster)搭建
前言 redis集群对于很多人来说非常熟悉,在前些日子,我也有一位大兄弟也发布过一篇关于在阿里云(centOS7)上搭建redis 集群的文章,虽然集群搭建的文章在网上很多,我比较喜欢这篇文章的地方是 ...
- 使用net.sf.fjep.fatjar插件将第三方JAR包打包进自已的JAR包中
一般单个工程,在没有应用别人的jar包时导出为jar很简单,只要设置一个Main-Class就行了,也就是选择程序入口(main所在类).但是涉及到了数据库或需要用到第三方的JAR,就需要用到相应的数 ...
- cf499B-Lecture 【map】
http://codeforces.com/problemset/problem/499/B B. Lecture You have a new professor of graph theo ...
- jmeter压力测试的简单实例+badboy脚本录制
JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...
- 一款比较好用的JS时间控件-laydate
官方讲解:http://laydate.layui.com/ 具体的内容请看官方讲解,此处仅说名应用: 1.在jsp或html或其他中引入laydate.js <script src=&qu ...
- table 合并行和列
table合并行列,以及拆分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- CentOS压力测试工具Tsung安装和图形报表生成Tsung安装配置
Tsung 是一个压力测试工具,可以测试包括HTTP, WebDAV, PostgreSQL, MySQL, LDAP, and XMPP/Jabber等服务器.针对 HTTP 测试,Tsung 支持 ...
- Linux 设置默认编辑器(以nano为例)
查看nano地址 which nano output: /usr/bin/nano 设置默认编辑器 nano ~/.bashrc export EDITOR=nano alias vi=/usr/bi ...
- 1700 Crossing River
题目链接: http://poj.org/problem?id=1700 1. 当1个人时: 直接过河 t[0]. 2. 当2个人时: 时间为较慢的那个 t[1]. 3. 当3个人时: 时间为 t[0 ...
- 1056 IMMEDIATE DECODABILITY
题目链接: http://poj.org/problem?id=1056 题意: 给定编码集, 判断它是否为可解码(没有任何一个编码是其他编码的前缀). 分析: 简单题目, 遍历一遍即可, 只需判断两 ...