自定义表单上传图片

以下代码为表单上传图片实现步骤

  • 1.展示图片上传的表单

    • 正则匹配展示表单的urls

        # 展示表单
        url(r'^upload/$', views.upload),
      
    • 展示表单的视图

        # 上传图片的表单
        def upload(request):
            return render(request, 'Book/upload.html')
      
    • 展示表单的模板

      • form:post请求enctype="multipart/form-data"
      • input:type为file
      • CSRF安全验证
<form action="/recv/" method="post" enctype="multipart/form-data">

{% csrf_token %}

<input type="file" name="pic">
<br>
<br>
<input type="submit" value="上传">

</form>
  • 2.接收并处理客户端上传的图片

    • 需求:图片保存到项目静态文件中,并把路径保存到数据库表中

    • 正则匹配接收图片的urls

       # 接收图片
        url(r'^recv/$', views.recv),
      
    • 接收并处理图片的视图

      • request对象的FILES属性用于接收请求的文件

        from django.conf import settings
        
        # 接收图片
        def recv(request):
          # 从请求报文中获取图片的网络数据
          picture = request.FILES.get('pic')
          # 获取图片名字
          name = picture.name
          # 拼接图片保存在服务器路径
          path = '%s/Book/%s'%(settings.MEDIA_ROOT, name)
        
          # 将图片网络数据写入到path
          with open(path, 'wb') as pic:
              # 遍历图片网络数据
              for c in picture.chunks():
                  # 写入图片网络数据
                  pic.write(c)
        
          # 将图片路径写入到数据库
          pictureinfo = PictureInfo()
          pictureinfo.path = 'Book/%s'%name
          pictureinfo.save()
        
          return HttpResponse('OK!')