首页 > 其他分享 >django练手(二十二):增加删除图片的功能

django练手(二十二):增加删除图片的功能

时间:2024-01-14 10:45:35浏览次数:33  
标签:练手 二十二 django range num avatar file path page

一、功能描述

  1. 缩略图下面增加图片名称和删除链接;
  2. 点击删除链接发送post请求到后台,并传图片id;
  3. 后台接收到id,把该id图片的is_active值置为false;
  4. 刷新缩略图的div;
  5. 刷新分页区域。

二、功能实现

  1. 修改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)
    
  2. 在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, })
    
    

标签:练手,二十二,django,range,num,avatar,file,path,page
From: https://www.cnblogs.com/shuxieben/p/17963414

相关文章

  • Django客户端应用1向服务端应用2发送POST请求并接收解析数据
    一、应用1发送post请求deflogin(url,data):response=requests.post(url,json=data)ifresponse.status_code==200:result=response.json()print(result)returnresultelse:returnNonetry:url="htt......
  • 如何在脚本中使用导入django环境?
    importosif__name__=='__main__':os.environ.setdefault('DJANGO_SETTINGS_MODULE','dd85.settings')#这句直接去wsgi.py中拷贝过来即可importdjangodjango.setup()fromapp03importmodelsstudent_list=models.Stude......
  • 【Django开发】美多商城项目第2篇:Django用户注册和登录开发(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsgi......
  • 在Django中,`python manage.py makemigrations`和`python manage.py migrate`是两个用
    在Django中,`pythonmanage.pymakemigrations`和`pythonmanage.pymigrate`是两个用于数据库迁移的命令,它们的主要区别在于:-`pythonmanage.pymakemigrations`:这个命令主要是记录我们对`models.py`的所有改动,并且将这个改动迁移到`migrations`这个文件下生成一个文件,例如:`0001`......
  • 美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推
    一、介绍美食管理与推荐系统。本系统使用Python作为主要开发语言开发的一个美食管理推荐网站平台。网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求,并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后端的数据通信。创新点......
  • Django quertset、set的序列化
    一、几种序列化importjson#序列化querysetdefxuliehuaQueryset(request):querylist=models.LsTable.objects.all()querylist_json=serializers.serialize("json",querylist)returnHttpResponse(querylist_json)#序列化setdefxuliehuaQueryset(......
  • Django中的URL模式
    Django中的URL模式是一种用于处理HTTP请求和将请求映射到相应的视图函数的技术。URL模式是Django路由系统的基础,它负责接收客户端发送的请求,并将其映射到相应的视图函数进行处理。URL模式的核心功能是URL匹配和视图函数的调用。URL模式底层逻辑主要包括以下几个方面:URL模式类:Django......
  • 解决Django Elastic Beanstalk与RDS MySQL连接问题
    根据错误消息,问题在于您的ElasticBeanstalk环境中缺少MySQL配置。这可能是由于缺少所需的软件包或依赖项导致的。解决此问题的步骤如下:在您的项目根目录中创建一个名为.ebextensions的文件夹。在.ebextensions文件夹中创建一个名为packages.config的文件,并在其......
  • 【Django开发】美多商城项目第1篇:项目结构设计和工程创建(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsgi......
  • 创建django项目
    1打开虚拟机创建虚拟环境(生成的虚拟环境目录会在.virtualenvs目录下面)  虚拟环境存放该项目依赖的包和解释器mkvirtualenv -p /usr/bin/python3.8 djEnv删除虚拟环境(要退出当前虚拟环境  deactivate)rmvirtualenvdjEnv2切换到该环境workondjEnv下载django包......