首先配置setting文件,在setting文件的后面加上:
MEDIA_ROOT = os.path.join(BASE_DIR,"static/unload")
上传用户头像
1、首先设计一个模型
from django.db import models
# Create your models here.
class User(models.Model):
u_name = models.CharField(max_length=50)
u_age = models.IntegerField(default=18)
# 保存头像
# 目录:static/upload/icon
# upload_to 表示指定图片上传的相对路径名,及文件上传的路径的前缀
u_img = models.ImageField(upload_to="icon")
上传的图片保存在icon目录下
2、写好模板文件
def imgUpload(request):
return render(request, 'imgUpload.html')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'day02:doImgUpload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
姓名:<input type="text" name="name"> <br/>
年龄:<input type="text" name="age"> <br/>
头像:<input type="file" name="img"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
注:html表单中
1.上传文件的标签:
<input type="file" name="img">
2.表单提交需要用post请求.还需要设置数据的编码类型,如: enctype="multipart/form-data"
3、接收并保存数据
def doImgUpload(request):
name = request.POST.get('name')
age = request.POST.get('age')
# 获取头像
img = request.FILES.get('img')
user = User()
user.u_name = name
user.u_age = age
user.u_img = img
user.save()
return HttpResponse('上传成功')
4、展示数据库存储的图片
def getImg(request):
user = User.objects.filter(u_name="ppp").first()
# 获取头像所在的路径
imgPath = "/static/upload/" + user.u_img.url
data = {
"imgPath":imgPath
}
return render(request,"getImg.html",context=data)
获取图片的路径:
user.u_img 数据中的相对路径
user.u_img.path 绝对路径
user.u_img.url 相对路径
imgPath = "/static/upload/" + user.u_img.url
将获取到的路径传递要给模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>展示图片</title>
</head>
<body>
<img src="{{ imgPath }}" alt="">
</body>
</html>
自定义上传文件
以图片为例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="{% url 'day02:doFileUpload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
文件: <input type="file" name="file"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
def doimgUpload(request):
# 获得文件
uploadFile = request.FILES.get("file")
# 文件的写入操作
# 服务器文件的名字通常唯一的
# 设置文件名及上传路径
filePath = os.path.join(settings.MEDIA_ROOT,createFileName()+".jpg" )
# 以写的方式打开文件
with open(filePath,mode="wb") as wf:
# 将文件分成很多分写入
for i in uploadFile.chunks():
wf.write(i)
wf.flush()
return HttpResponse("上传成功")
def createFileName():
fileName = str(uuid.uuid4())
return fileName
上传的文件保存在static的upload目录下