文件上传

  首先配置setting文件,在setting文件的后面加上:

MEDIA_ROOT = os.path.join(BASE_DIR,"static/unload")

上传用户头像

1、首先设计一个模型

from django.db import models

# Create your models here.

class User(models.Model):
    u_name = models.CharField(max_length=50)
    u_age = models.IntegerField(default=18)
    # 保存头像
    # 目录:static/upload/icon
    # upload_to 表示指定图片上传的相对路径名,及文件上传的路径的前缀
    u_img = models.ImageField(upload_to="icon")

上传的图片保存在icon目录下

2、写好模板文件

def imgUpload(request):
    return render(request, 'imgUpload.html')
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'day02:doImgUpload' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    姓名:<input type="text" name="name"> <br/>
    年龄:<input type="text" name="age"> <br/>
    头像:<input type="file" name="img"> <br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

注:html表单中
      1.上传文件的标签:
         <input type="file" name="img">
      2.表单提交需要用post请求.还需要设置数据的编码类型,如: enctype="multipart/form-data" 

3、接收并保存数据

def doImgUpload(request):
    name = request.POST.get('name')
    age = request.POST.get('age')
    # 获取头像
    img = request.FILES.get('img')
    
    user = User()
    user.u_name = name
    user.u_age = age
    user.u_img = img
    
    user.save()
    return HttpResponse('上传成功')

4、展示数据库存储的图片

def getImg(request):
    user = User.objects.filter(u_name="ppp").first()
    # 获取头像所在的路径
    imgPath = "/static/upload/" + user.u_img.url
    data = {
        "imgPath":imgPath
    }
    return render(request,"getImg.html",context=data)

获取图片的路径:

user.u_img               数据中的相对路径

user.u_img.path       绝对路径

user.u_img.url          相对路径

 imgPath = "/static/upload/" + user.u_img.url

将获取到的路径传递要给模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>展示图片</title>
</head>
<body>
<img src="{{ imgPath }}" alt="">



</body>
</html>

自定义上传文件

以图片为例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <form action="{% url 'day02:doFileUpload' %}" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        文件: <input type="file" name="file"> <br/>
        <input type="submit" value="提交">

    </form>

</body>
</html>
def doimgUpload(request):

    # 获得文件
    uploadFile =  request.FILES.get("file")
    # 文件的写入操作
    # 服务器文件的名字通常唯一的
    # 设置文件名及上传路径
    filePath = os.path.join(settings.MEDIA_ROOT,createFileName()+".jpg" )
    # 以写的方式打开文件
    with open(filePath,mode="wb") as wf:
        # 将文件分成很多分写入
        for i in uploadFile.chunks():
            wf.write(i)
            wf.flush()

    return  HttpResponse("上传成功")


def createFileName():
     fileName = str(uuid.uuid4())
     return  fileName

上传的文件保存在static的upload目录下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值