settings:
默认文件存在内存中
MEDIA_ROOT = os.path.join(BASE_DIR,'static/image')
html
multipart/form-data
不对字符编码。当使用有文件上传控件的表单时,该值是必需的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="/icon/" method="post" enctype="multipart/form-data">
<input type="text" name="username" placeholder="输入用户名">
<input type="file" name="user_icon" placeholder="请选择图片">
<button>上传</button>
</form>
</body>
</html>
models
上传图片使用ImageField
upload_to 指定上传图片文件夹名
icon = models.ImageField(upload_to="icons")
views
import os
import random
import uuid
from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from App.models import User
from Django1909.settings import BASE_DIR
@csrf_exempt
def icon(request):
# 第一种方式 打开文件位置,写入,并记得flush冲洗
# user_icon = request.FILES.get("user_icon")
# filename=uuid.uuid4().hex + str(user_icon)
# with open(os.path.join(BASE_DIR,'static/image/%s'% filename ),"wb") as fp:
# for part in user_icon.chunks():
# fp.write(part)
# fp.flush()
#第二种
username = request.POST.get("username")
user_icon = request.FILES.get("user_icon")
print(user_icon)
user = User()
user.username = username
user.icon = user_icon
user.save()
# user = User.objects.create(username=username,icon=user_icon)
print(user)
return HttpResponse('上传成功')
def upload(request):
return render(request,'upload.html')
urls
path('icon/',views.icon),
path('upload/',views.upload)
更换图片
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>更换头像</title>
</head>
<body>
<form action="{% url 'users:update_icon' %}" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="{{ user.id }}">
<input type="file" name="usericon" placeholder="请选择图片">
<button>更改</button>
</form>
</body>
</html>
views
def update_icon(request):
if request.method == 'GET':
id = request.GET.get('i')
user = User.objects.get(id=id)
return render(request, 'user/update_icon.html',context={'user':user})
elif request.method == 'POST':
id = request.POST.get('id')
user = User.objects.get(id=id)
usericon = request.FILES.get('usericon')
user.icon =usericon
user.save()
return redirect('/users/index')
urls
path('update_icon',update_icon,name='update_icon')