一、功能描述
- 缩略图下面增加图片名称和删除链接;
- 点击删除链接发送post请求到后台,并传图片id;
- 后台接收到id,把该id图片的is_active值置为false;
- 刷新缩略图的div;
- 刷新分页区域。
二、功能实现
- 修改app-models.py 的avatar类,增加is_active字段,代码如下:
# 用户图标上传模型 class Avatar(models.Model): # 图标名称 title = models.CharField(max_length=30, verbose_name='图片名称', help_text='图片名称,超过30个字会被截断') # 上传时间 time = models.DateTimeField(auto_now_add=True, help_text='图片上传时间') # 图片路径 img_url = models.CharField(max_length=300, verbose_name='图片路径') # 是否删除 is_active=models.BooleanField(default=1)
- 在app-views-app-account.py 文件中修改avatar_upload方法,获取缩略图数据时增加过滤条件,is_active==True。代码如下:
# 图标上传 @login_required def avatar_upload(request): if request.method == 'GET': # 获取所有的用户图标数据 # avatars = Avatar.objects.filter().all().order_by('-id') avatars = Avatar.objects.filter(is_active=True).order_by('-id') # 注意:Paginator查询集能处理的queryset必须是有序的 paginator = Paginator(avatars, 3) # 获浏览器传递的取页码数 page_num = request.GET.get('page_num', '') # 如果page_num非空且page_num字符串只有数字构成。方法isnumeric() 检测字符串是否只由数字组成。这种方法是只针对unicode对象。 if page_num is not None and page_num.isnumeric(): page_num = int(page_num) else: page_num = 1 if page_num not in paginator.page_range: page_num = 1 avatars = paginator.page(page_num) # page_range = paginator.page_range page_range = new_page_range(page_range, page_num) return render(request, 'app/avatar.html', {"avatars": avatars, "page_range": page_range}) if request.method == "POST": # 1、判断文件路径是否存在,如果不存在,生成文件路径。 image_folder_path = os.path.join(settings.MEDIA_ROOT, 'image', 'avatar') # 文件路径 image_folder_path_exists = os.path.exists(image_folder_path) # 判断文件路径是否存在 # 如果不存在,则生成文件路径 if not image_folder_path_exists: os.makedirs(image_folder_path) # 获取所有上传的图标 file_list = request.FILES.getlist('avatar_upload') if file_list: for file in file_list: # 1、把文件名替换成整个系统唯一的文件名。 name = uuid_name(file.name) # 2、获取文件中文名 title = os.path.splitext(file.name)[0] # 3、文件存储的位置。 file_path = image_folder_path + '\\' + name # 4、把文件写入硬盘 with open(file_path, 'wb', ) as f: for part in file.chunks(): f.write(part) # 内容块写入文件 f.flush() # 清除内存 # 5、生成存储在数据库里的路径。 database_path = 'uploads/image/avatar/' + name # 6、把文件信息写入数据库 avatar = Avatar() avatar.title = title avatar.img_url = database_path avatar.save() return JsonResponse({"status": True, })