基于django的视频点播网站开发-step7-我的收藏喜欢功能...

news/2024/5/9 9:34:25/文章来源:https://blog.csdn.net/weixin_34268310/article/details/89550818

从本讲起,我们会讲到个人菜单中另外两个比较重要的功能,“我的收藏”与“我的喜欢”。感兴趣的同学可以点击网站的右上角,即可弹出个人菜单,你就能看到“我的收藏”与“我的喜欢”了。通过学习这两个功能,我们会加深对django中通用视图类的理解与应用。

Demo预览

我的收藏

我们先来讨论模型,我们分析一下,我收藏的视频与我喜欢的视频,其中的视频都是属于video模型,因此我们应该在video模型上进行修改。因为是我的收藏我的喜欢,都是与关联,又因为,我可以收藏多个视频,视频也可以被多个用户收藏,所以用户与视频是属于多对多的关系。所以我们在video模型上添加两个字段liked和collected,分别对应我喜欢和我收藏。代码如下

class Video(models.Model):STATUS_CHOICES = (('0', '发布中'),('1', '未发布'),)title = models.CharField(max_length=100,blank=True, null=True)desc = models.CharField(max_length=255,blank=True, null=True)classification = models.ForeignKey(Classification, on_delete=models.CASCADE, null=True)file = models.FileField(max_length=255)cover = models.ImageField(upload_to='cover/',blank=True, null=True)status = models.CharField(max_length=1 ,choices=STATUS_CHOICES, blank=True, null=True)view_count = models.IntegerField(default=0, blank=True)liked = models.ManyToManyField(settings.AUTH_USER_MODEL,blank=True, related_name="liked_videos")collected = models.ManyToManyField(settings.AUTH_USER_MODEL,blank=True, related_name="collected_videos")create_time = models.DateTimeField(auto_now_add=True, blank=True, max_length=20)

可以看出liked和collected字段都是属于ManyToManyField类型,表示视频与用户是多对多的关系。并分别设置它们的别名为"liked_videos"和"collected_videos",有django基础的同学应该明白,通过别名也可以访问到数据。

下面我们来添加两者的路由,添加在users/urls.py下面。

path('<int:pk>/collect_videos/', views.CollectListView.as_view(), name='collect_videos'),
path('<int:pk>/like_videos/', views.LikeListView.as_view(), name='like_videos'),

其中,我的收藏的视图类是CollectListView,我的喜欢的视图类是LikeListView。我们先来实现CollectListView

class CollectListView(generic.ListView):model = Usertemplate_name = 'users/collect_videos.html'context_object_name = 'video_list'paginate_by = 10def get_context_data(self, *, object_list=None, **kwargs):context = super(CollectListView, self).get_context_data(**kwargs)paginator = context.get('paginator')page = context.get('page_obj')page_list = get_page_list(paginator, page)context['page_list'] = page_listreturn contextdef get_queryset(self):user = get_object_or_404(User, pk=self.kwargs.get('pk'))videos = user.collected_videos.all()return videos

与首页展示的功能类似,这里同样继承了ListView通用视图类。并使用了公共函数get_page_list对数据进行分页。在获取收藏数据列表时,我们用的是user.collected_videos.all(),其中collected_videos就是前面定义的别名。 并通过配置template_name将数据传递给模板文件users/collect_videos.html。

模板文件关键代码

<h3 class="ui header">我的收藏</h3>
<div class="ui unstackable items">{% for item in video_list %}<div class="item"><div class="ui tiny image">{% thumbnail item.cover "300x200" crop="center" as im %}<img class="ui image" src="{{ im.url }}">{% empty %}{% endthumbnail %}</div><div class="middle aligned content"><a class="header" href="{% url 'video:detail' item.pk %}">{{ item.title }}</a></div></div>{% empty %}<h3>暂无数据</h3>{% endfor %}</div>{% include "base/page_nav.html" %}

最终展示效果

我的喜欢

下面来开发我的喜欢功能

该功能与我的收藏功能类似。因为前面已经添加了like_videos路由,我们直接写LikeListView的代码

class LikeListView(generic.ListView):model = Usertemplate_name = 'users/like_videos.html'context_object_name = 'video_list'paginate_by = 10def get_context_data(self, *, object_list=None, **kwargs):context = super(LikeListView, self).get_context_data(**kwargs)paginator = context.get('paginator')page = context.get('page_obj')page_list = get_page_list(paginator, page)context['page_list'] = page_listreturn contextdef get_queryset(self):user = get_object_or_404(User, pk=self.kwargs.get('pk'))videos = user.liked_videos.all()return videos

与我的收藏的模式一模一样,同样是继承ListView并设置相关model与template_name变量。最终通过users/like_videos.html来渲染。

like_videos.html关键代码

<h3 class="ui header">我的喜欢</h3>
<div class="ui unstackable items">{% for item in video_list %}<div class="item"><div class="ui tiny image">{% thumbnail item.cover "300x200" crop="center" as im %}<img class="ui image" src="{{ im.url }}">{% empty %}{% endthumbnail %}</div><div class="middle aligned content"><a class="header" href="{% url 'video:detail' item.pk %}">{{ item.title }}</a></div></div>{% empty %}<h3>暂无数据</h3>{% endfor %}</div>{% include "base/page_nav.html" %}

最终展示效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_760000.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEO优化,网站沙盒期,到底存在吗?

对于SEO人员而言&#xff0c;特别是新建立的网站&#xff0c;我们经常会遇到一个非常常见的问题&#xff1a; 那就是新建页面长时间不被收录&#xff0c;而网站索引量却在不断增加。 网站日志中的爬行&#xff0c;也非常频繁。 这个时候有人讲&#xff0c;网站进入沙盒期…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样&#xff0c;你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

hexo 本地编辑md文件_「原创」手把手教你使用Hexo和GitHub搭建自己的个人博客网站...

安装nodejs环境这个直接搜索安装即可&#xff0c;安装完成之后&#xff0c;通过如下命令检测环境变量是否安装成功&#xff1a;λ node -v# 输出版本号v12.13.1正确输入版本号即可。安装cnpmcnpm是淘宝镜像&#xff0c;可以加快依赖的安装速度npm install cnpm -g --registryht…

第一次网站设计 请大家多多指点

第一次做网站设计 这是一个ASP.NET 鲜花网 希望大家能多提点意见 改善它完善它。谢谢了&#xff01; 转载于:https://www.cnblogs.com/Simcoder/archive/2010/04/06/1705220.html

漂亮的html静态页面_静态网页对网站建设越来友好

企业网站建设开发设计了网站內容智能管理系统&#xff0c;这就引起一个问題&#xff0c;针对企业公司来讲&#xff0c;在执行网站建设新项目的情况下&#xff0c;静态数据化的html网页页面&#xff0c;更合适企业进行互联网营销。就算有时候有网站內容升级&#xff0c;要是不经…

html搜索框_SEO搜索引擎的工作原理

了解一下搜索引擎优化的原理&#xff0c;就会知道为什么要这样做了。第一步&#xff1a;蜘蛛爬行轨迹搜索引擎是通过一种特定规律的程序跟踪网页的链接&#xff0c;从一个链接爬到另外一个链接&#xff0c;像蜘蛛在蜘蛛网上爬行一样&#xff0c;所以被称为“蜘蛛”也被称为“机…

We7荣获“政府网站群建设最佳产品奖”

8月23日&#xff0c;由中国信息化推进联盟、中国计算机行业协会、中国计算机报社等国家信息化领域权威机构和权威媒体共同组织开展的“第四届中国行业信息化奖项评选活动暨2012中国行业信息化颁奖盛典”在北京国宾酒店隆重举办。来自行业信息化领域的500余位企业代表、政府领导…

蜘蛛搜索引擎_搜索引擎蜘蛛为什么对网站不爬行呢?

在网站的优化过程中&#xff0c;很多优化人员都会遇到网站不经常收录&#xff0c;或者网站日志里都没有蜘蛛爬行的情况&#xff0c;如果新站遇到这样的问题还算正常&#xff0c;但是长期网站不被收录&#xff0c;网站就不会有排名和权重&#xff0c;更不会给企业带来更多的好处…

两青年更改源代码 “黑”十多家政府网站, 不是技术高,是政府网站安全性太低...

[提要] 两名19岁青年&#xff0c;利用后门程序先后侵入最高检察院等十多个政府机关的官方网站后台&#xff0c;更改网页源代码为其他网站牟利。公诉人提出&#xff0c;范某、文某侵入国家事务领域的计算机信息系统&#xff0c;多次利用后门程序非法控制非国家事务、国防建设和…

python plt画图_「figure」【Python】 【绘图】plt.figure()的使用 - seo实验室

figure 1.figure语法及操作 (1)figure语法说明 figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue) num:图像编号或名称&#xff0c;数字为编号 &#xff0c;字符串为名称 figsize:指定figure的宽和高&#xff0c;单位为英寸&#xff1b; dpi参…

从零开始编写自己的C#框架(25)——网站部署

导航 1、关掉访问保护 2、发布网站 3、复制网站到服务器 4、添加新网站 5、设置网站访问权限 6、设置文件夹访问权限 7、控制可更新文件夹执行权限 8、设置“应用程序池”.net版本与模式 9、附加数据库 10、添加数据库访问用户 11、设置数据库链接 12、部署注意事项 对于网站的…

转载——网站转接支付宝解决方案

大型网上购物系统除了能让会员选择货到付款结账方式外&#xff0c;还应该提供一些更方便快捷的网上支付方式。如果网上商店没有足够的实力提供会员直接在网站中建立现金账户的功能&#xff0c;就可以将订单信息转接到支付宝&#xff0c;让会员从支付宝付款。当然就算会员可以在…

网站回到顶部按钮JS

为什么80%的码农都做不了架构师&#xff1f;>>> <script type"text/javascript"> $(function(){$(window).scroll(function(){$(window).scrollTop()>1000 ? $("#gotopbtn").css(display,).click(function(){$(window).scrollTop(0)…

让网站动起来!12款优秀的 jQuery 动画插件推荐

如今&#xff0c;大多数设计师和开发人员被要客户要求开发动态的网站。创造视觉震撼和醒目的动态网站是艰巨的任务&#xff0c;因为它需要大量的努力和创造力。在网络上有大量的工具和插件可用于创建网站动画。许多开发人员正在使用 HTML5 和 jQuery 提供的最新功能来创建创建和…

在网站中使用Bing Translator插件翻译文章。

前一阵子给项目增加了翻译的功能&#xff0c;用的是Bing Translator Widget,今天看见有个兄弟写自定义自己的博客&#xff0c;我就尝试着把这个插件加到了自己的博客中。还真的好用。大家先看下效果&#xff0c;觉得好的请继续往下看。方法很简单的。 方法&#xff1a; 1.先去官…

curl网站开发指南

文章转自&#xff1a;http://www.ruanyifeng.com/blog/2011/09/curl.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2011年9月 4日 感谢 腾讯课堂NEXT学院 赞助本站&#xff0c;腾讯官方的前端课程 免费试学。 我一向以为&#xff0c;curl只是一个编程用的函数库。 最近才…

VS2012发布网站详细步骤

1、打开你的VS2012网站项目&#xff0c;右键点击项目》菜单中 重新生成一下网站项目&#xff1b;再次点击右键》发布&#xff1a; 2、弹出网站发布设置面板&#xff0c;点击<新建..>,创建新的发布配置文件&#xff1a; 输入你自己定义的配置文件名&#xff1a; 3、点击下…

MVC5 网站开发之四 业务逻辑层的架构和基本功能

业务逻辑层在Ninesky.Core中实现&#xff0c;主要功能封装一些方法通过调用数据存储层&#xff0c;向界面层提供服务。 目录 奔跑吧&#xff0c;代码小哥&#xff01; MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开…

一次网站迁移故障及分析

公司运营项目迁移&#xff0c;这个项目最重要的就是充值和让玩家能玩游戏&#xff0c;还有后台统计&#xff0c;就是类似支付宝这样的第三方平台的支付工具&#xff0c;由于涉及的到钱&#xff0c;所以上个月就做好迁移的准备&#xff0c;将代码和数据库都已转移完毕&#xff0…