您的位置:首页 > 编程语言 > Go语言

Django框架(十五:表单中图片的上传)

2018-11-07 19:44 204 查看

图片的上传,就是后台获取表单传过来的图片并保存。需要实现两部分,一部分是将图片的路径保存到数据库,另一部分是把图片文件上传到后台。
下面来执行具体的操作:

  1. 由于上传图片时默认保存在根目录下的,所以需在settings.py文件中配置图片上传的路径
  2. 定义一个Model类,在Model中声明一个用于保存图片地址的字段,放在数据库的表中;(此处不再展示代码)
  3. 在html文件中添加上传图片的表单。input的type值必须为file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片上传</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
{# application/x-www-form-urlencoded:  username='123'&password='456' 适合文本 #}
{# multipart/form-data: 以指定的分隔符对上传数据进行分割 适合二进制文件 #}
{# 上传图片相当于上传数据,一定要使用POST请求,并且要指定一个属性enctype #}
{% csrf_token %}
<input type="file" name="picture">
<button type="submit">上传</button>
</form>
<img src="/static/media/{{ img.pic_url }}" alt="">
</body>
</html>
  1. 路由就自己配置了,接下来在views.py文件中代码实现,具体的作用,已经注释
def uploadimg(request):
if request.method == 'GET':
# img = PictureModel.objects.get(id=18)
# return render(request, 'index.html', {'img': img})

return render(request, 'index.html')
else:
# 需要从表单input中,获取上传的文件对象(图片)
pic = request.FILES.get('picture')

# 1. 创建Model对象,保存图片路径到数据库
model = PictureModel()
model.pic_url = pic.name
model.save()

# 2. 开始处理图片,将图片写入到指定目录。(/static/media/images/)
# 拼接图片路径
url = settings.MEDIA_ROOT + 'images/' + pic.name
with open(url, 'wb') as f:
# pic.chunks()循环读取图片内容,每次只从本地磁盘读取一部分图片内容,加载到内存中,并将这一部分内容写入到目录下,写完以后,内存清空;下一次再从本地磁盘读取一部分数据放入内存。就是为了节省内存空间。
for data in pic.chunks():
f.write(data)

return HttpResponse('图片上传成功')
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: