标签:
一个上传文件的字段。
注意
FileField字段不支持primary_key 和unique参数,如果使用会生成 TypeError错误
有两个可选参数:
在旧版本Django中,upload_to 属性是必须要有的;
这将会添加一个本地文件系统路径到 MEDIA_ROOT 设置中,来明确 url 属性的值。
这个路径可能会包含一个 strftime() 格式串,并且会在文件上传时被替换为 实际的date/time作为文件路径 (这样上传的文件就不会塞满你指定的文件夹了).
这也可以是一个可调用对象,如函数。可以调用它来获取上传路径,包括文件名。它必须接受两个参数,并且返回一个Unix-style的路径(带有/)给存储系统。这被传递的两个参数为:
Argument | Description |
---|---|
instance |
FileField 被定义时的一个实例. 更准确地说,这是一个包含当前文件的特殊实例。 通常, 这个对象还没有在数据库中保存, 若该对象用的是默认的 AutoField字段, 那它的primary key 字段还可能没有值. |
filename | The filename that was originally given to the file. This may or may not be taken into account when determining the final destination path. |
一个storage对象,用于你的文件的存取。参见Managing files获取这个对象的细节。
这个字段在表格里的默认组件是 ClearableFileInput.
在模型中调用FileField 或 ImageField (见下方) 需如下几步:
例如,如果你的 MEDIA_ROOT设定为 ‘/home/media‘,并且 upload_to设定为 ‘photos/%Y/%m/%d‘。 upload_to的‘%Y/%m/%d‘被strftime()所格式化;‘%Y‘ 将会被格式化为一个四位数的年份, ‘%m‘ 被格式化为一个两位数的月份‘%d‘是两位数日份。如果你在Jan.15.2007上传了一个文件,它将被保存在/home/media/photos/2007/01/15目录下.
如果你想获得上传文件的存盘文件名,或者是文件大小,你可以分别使用 name 和 size 属性; 更多可用属性及方法信息,请参见 File类索引 和 Managing files 主题指导.
Note
保存的文件作为模型存储在数据库中的一部分,所以在磁盘上使用的实际的文件名在模型保存完毕之前是不可靠的。
上传的文件对应的URL可以通过使用 url 属性获得. 在内部,它会调用 Storage 类下的url()方法.
值得注意的是,无论你在任何时候处理上传文件的需求,你都应该密切关注你的文件将被上传到哪里,上传的文件类型,以避免安全漏洞。认证所有上传文件 以确保那些上传的文件是你所认为的文件。例如,如果你盲目的允许其他人在无需认证的情况下上传文件至你的web服务器的root目录中,那么别人可以上传一个CGI或者PHP脚本然后通过访问一个你网站的URL来执行这个脚本。所以,不要允许这种事情发生。
甚至是上传HTML文件也值得注意,它可以通过浏览器(虽然不是服务器)执行,也可以引发相当于是XSS或者CSRF攻击的安全威胁。
FileField 实例将会在你的数据库中创建一个默认最大长度为100字符的varchar 列。就像其他的fields一样, 你可以用 max_length 参数改变最大长度的值.
标签:
原文地址:http://www.cnblogs.com/haoshine/p/5447885.html