mysite2/settings.py
#設(shè)置圖片的保存位置
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")

image.png
book/models.py
#英雄類
class HeroInfo(models.Model):
...
#英雄圖片 默認(rèn)上傳到 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生成不重復(fù)的圖片名,避免上傳相同的名字的圖片被覆蓋
def do_file_name(file_name):
return str(uuid.uuid1())+os.path.splitext(file_name)[1]
def hero_add(request):
...
hpic = request.FILES["hpic"]
# 審核上傳文件大小 超過(guò)30K不能上傳
if hpic.size > 1024 * 30:
return render(request, "book/hero_add.html", {"error_link": "文件最大不超過(guò)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)
# 寫(xiě)
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": "已添加成功,你可以繼續(xù)添加或返回英雄列表頁(yè)"})