Django项目:图片上传(静态文件的使用)

作者: oldboy 分类: Django 发布时间: 2023-12-17 21:28

接“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、首页添加一个跳转到上传文件的按钮

效果:

6、浏览器测试上传文件

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云