Django项目:图片上传(静态文件的使用)
接“Django项目:注册登录页面”文章
1、配置settings文件
STATICFILES_DIRS=[
BASE_DIR / 'static',
]
2、编辑上传页面模板
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传图片</title>
</head>
<body>
<h2>上传图片</h2>
<hr>
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>选择图片: <input type="file" name="img"></p>
<p><button>上传</button></p>
</form>
</body>
</html>
3、编辑上传页面视图
代码:
def upload(request):
userid=request.session.get('userid',0) #验证用户登录再返回页面,获取CKKOIES的userid,默认值为0
users=User.objects.filter(id=userid)
if users.exists():
user=users.first()
if request.method == 'GET':
return render(request,'upload.html',{'user':user})
elif request.method == 'POST':
img=request.FILES.get('img',None) #如果没有选中文件就上传的话给个默认值None
if not img:
return HttpResponse('请正确选择图片文件!')
img_name=img.name #获取文件名
suffix_name= os.path.splitext(img_name)[-1] #获取文件的后缀名
img_new_name=str(uuid4())+suffix_name #使用uuid4()生成新的文件名,解决同名文件上传覆盖的问题
dir_path=os.path.join(STATICFILES_DIRS[0],'upload') #先获取静态目录下的upload目录
img_path=os.path.join(dir_path,img_new_name) #获取存放文件的绝对路径
with open(img_path,'ab') as f: #存在文件
for part in img.chunks(): #分段写入
f.write(part)
f.flush() #清空缓存
return render(request,'upload.html')
else:
return redirect('login')
4、编辑上传页面路由
5、首页添加一个跳转到上传文件的按钮
效果: