django 静态文件之如何上传文件

配置

有关上传文件的静态文件是用media来处理的
在settings.py里面增加:

MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')

对于这个配置什么意思,可以参照我另一篇博文 :静态文件的配置说明

使用django的FileField或ImageField字段

首先说明一下FileField的基本参数
FileField(upload_to = None, max_length = 100)
在upload_to设置上传的文件的安放路径,注意,这里写的是相对路径,
比如upload_to = ‘user/’
那么实际存储的路径为 os.path.join(MEDIA_ROOT, ‘user’),
比如MEDIA_ROOT 为 home/mysite/upload/
那么存储的路径就是 home/mysite/upload/user/
另外,使用这个字段时,上传的文件并没有存入数据库,存入数据库的只是上传的文件的路径(当然, 强大的django可以让我们轻松的获得相对路径和浏览器可以访问的绝对路径, 下面会讲到)

1.在model里面使用字段

比如有一个user的model, 需要一个字段来表示用户头像
在models.py中:

from django.db import models
class User(models.Model):
    user_name = models.CharField(max_length = 100)
    image = models.ImageField(uoload_to = 'user/', max_length = 100)

如果嫌upload_to要直接指定一个固定的路径,不安全,那么可以写成动态路径,如下

class User(models.Model):
    user_name = models.CharField(max_length = 100)
    image = models.ImageField(uoload_to = 'user/%Y/%m/%d/', max_length = 100)

django会将%Y/%m/%d/替换称当前时间的年月日, 格式具体如下
比如, 我在2016.8.16上传了一个文件,那么,存储的路径就是:
MEDIA_ROOT/user/2016/08/16/

2.如何上传文件呢,

我们以一个简单的例子来说明
新建一个项目mysite以及应用user
首先,在user/templates/中建立
page.html

<form action = "#" enctype="multipart/form-data">
    <input type="file" name = "cover_image" />
</form>

在views.py中:

from user.models import User
from django.shortcuts import render

def index(request):
    if request.method == 'GET':
        return render(request, 'page.html')
    else :
        //上传的文件保存在request.FILES中
        file = request.FILES.get('cover_image')
        user = User()
        user.user_name, user.image = 'boyce', file
        user.save()

在urls.py增加url与该视图函数对应即可,再次不重复了

当调用该视图函数时,就会将前端页面上传的文件存储到upload_to设置的路径中,

3.如何访问上传的路径

FileField字段有几个属性
FileField.url 显示上传文件的绝对路径
而FileField显示的是相对路径, 即使这upload_to设置的相对路径
比如
user.image 为 user/2016/8/13/photo.png
user.image.url 为 /upload/user/2016/8/13/photo.png
在浏览器上,使用绝对路径即可访问相应的上传文件(注意,这里的绝对路径, 不是本地的绝对路径, 而是浏览器可访问的绝对路径, 前缀一定是MEDIA_URL设置的值)
所以 /upload/user/2016/8/13/photo.png 对应的本地路径为/home/mysite/upload/user/2016/8/13/photo.png, (MEDIA_ROOT/user/2016/8/13/photo.png)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值