django-上传图片

上传图片

  • 当Django在处理文件上传的时候,文件数据被保存在request.FILES
  • FILES中的每个键为<input type="file" name="" />中的name
  • 注意:FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象
  • 使用模型处理上传文件:将属性定义成models.ImageField类型
pic=models.ImageField(upload_to='cars/')
  • 注意:如果属性类型为ImageField需要安装包Pilow
  • pip install Pillow==3.4.1

 

上传图片例子:

  • 图片存储路径
    • 在项目目录static/下创建media文件夹
    • 图片上传后,会被保存到“/static/media/图片文件”
    • 打开settings.py文件,增加media_root项

 url.py

1 from django.conf.urls import url,include
2 from . import views
3 
4 urlpatterns = [
5     url(r'^$',views.index),
6     url(r'^uploadPic$',views.uploadPic),
7     url(r'^uploadHandle$',views.uploadHandle),
8 ]

view.py

from django.shortcuts import render
from django.http import HttpResponse
from django.conf import settings
import os


#文件上传练习
def uploadPic(request):
    return render(request,'booktest/uploadPic.html')

def uploadHandle(request):
    file=request.FILES['pic1']   #获取上传的文件
    filepathname=os.path.join(settings.MEDIA_ROOT,file.name)  #拼接上传文件的路径
    with open(filepathname,'wb+') as pic:
        for c in file.chunks():       #在file.chunks()上循环而不是用read()保证大文件不会大量使用系统内存
            pic.write(c)
    # return HttpResponse(filepathname)
    return HttpResponse('<img src="/static/media/{}">'.format(file.name))  #返回上传的图片

uploadPic.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>文件上传</title>
 6 </head>
 7 <body>
 8     <form action="uploadHandle" method="post" enctype="multipart/form-data">   <!--上传文件需要加上enctype属性-->
 9         {% csrf_token %}
10         <input type="file" name="pic1">
11         <br><br>
12         <input type="submit" value="提交">
13     </form>
14 
15 </body>
16 </html>

 

 

posted on 2020-01-30 13:33  cherry_ning  阅读(167)  评论(0)    收藏  举报

导航