zoukankan      html  css  js  c++  java
  • 12-上传图片

    上传图片

      在Django中上传图片包括两种方式:1、在站点管理页面中上传图片 2、自定义form表单中上传图片

    上传图片后,将图片存储在项目静态文件中,然后将图片的路径存储在数据库表中。

    1、创建图片上传后保存的目录

    上传的图片也是属于静态文件,保存在static目录下media表示多媒体文件目录;Book表示区分那个应用上传的文件。图片上传后保存的路径:static/media/Book/

    2、在settings中,配置图片上传后保存目录

    #配置图片保存到的路径
    MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")

    3、创建上传图片的模型类

    1、定义图片保存的路径作为模型属性path    2、将模型类属性定义成models.ImageField类型

    class PictureInfo(models.Model):
          #upload_to:表示图片上传到哪儿了
          path = models.ImageField(upload_to="Book/")
        #修改表名
          class Meta:
               db_table = "pictureinfo"

    4、生成迁移

     python manage.py makemigrations

    5、执行迁移,把图片模型的表创建出来

    python manage.py migrate

    后台站点上传图片

    1、在admin.py文件中注册图片上传的模型类

     # 将上传图片的PictureInfo模型注册到后台站点
     admin.site.register(PictureInfo)

    进入站点即可以上传图片,图片上传存储在项目静态文件中,而图片的路径存储在数据库中。

    自定义表单上传图片

    1、表单的模板

    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

     # 接收图片
      path('recv/', views.recv),

    3、处理的图片视图

    requrst对象的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!')

    展示上传的图片

    1、匹配路由

     # 展示图片
     path(show/$, views.show),

    2、视图

     # 展示图片
      def show(request):
          return render(request, 'Book/show.html')

    3、模板

    <img src="/static/media/Book/mm02.jpg" alt="mm02">
  • 相关阅读:
    v$、v_$、gv$之间的关系
    10046确认多块读无法跨区
    查询表Or列的注释信息
    数据文件resize扩容
    11.2.0.4rac service_name参数修改
    数据库开启对sys用户的审计
    sql查询未走索引问题分析之查询数据量过大
    ORA-00600: internal error code, arguments: [kole_t2u], [34]
    ORA-00600: internal error code, arguments: [kcblasm_1], [103], [] bug
    Linux基础知识
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11722649.html
Copyright © 2011-2022 走看看