django图片上传

mysite2/settings.py

#设置图片的保存位置
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")
image.png

book/models.py

#英雄类
class HeroInfo(models.Model):
    ...
    #英雄图片 默认上传到 dedia文件夹中 将图片放入images中
    hpic = mdoels.ImageField(upload_to="images/)

图片上传需要使用form表单 提交类型为post 并加入enctype="multipart/form-data"
book/hero_add.html

<form action="{% url "book:hero_add" %}" method="post" enctype="multipart/form-data">
    
    图片:<input name="hpic" type="file"><br/>

book/views.py

#利用UUID生成不重复的图片名,避免上传相同的名字的图片被覆盖
def do_file_name(file_name):
    return str(uuid.uuid1())+os.path.splitext(file_name)[1]

def hero_add(request):
    ...
    hpic = request.FILES["hpic"]
    # 审核上传文件大小 超过30K不能上传
    if hpic.size > 1024 * 30:
        return render(request, "book/hero_add.html", {"error_link": "文件最大不超过30K"})
    # 保存到本地
    hpic_chunks = hpic.chunks()
    # 文件保存的路径
    file_name = os.path.join("images", do_file_name(hpic.name))
    file_path = os.path.join(settings.MEDIA_ROOT, file_name)
    # 写
    with open(file_path, "wb")as file:
        for chunk in hpic_chunks:
            file.write(chunk)
    hero = HeroInfo()
    ...
    hero.hpic = file_name
    hero.save()
    return render(request, "book/hero_add.html",{"ok_link": "已添加成功,你可以继续添加或返回英雄列表页"})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 6,308评论 0 8
  • 在上一个章节,我们已经创建了一个基础的Blog程序。现在我们将使用一些Dajngo高级功能,去实现一个完整的blo...
    金金刚狼阅读 8,991评论 1 12
  • Web框架之Django: (1)简介: Django是一个由Python写成开源的重量级Web应用框架,采用MT...
    老肖阅读 8,229评论 0 18
  • 一、Django框架前言知识: 1、C/S和B/S的区别: C/S结构软件:客户端/服务端软件,即客户端要自己下载...
    月下独酌123阅读 10,340评论 0 36
  • 大部分人只执著于人生的一小部分,以为那一小部分就可以发现整体。我们没有离开房间,就想探测河流的长宽,就想观察...
    菲梵飞阅读 3,122评论 0 2

友情链接更多精彩内容