需求:不论是游客还是评委进入系统,每日只能对两类视频中的一个视频进行一次投票(点赞)
解决过程:
听到最后这个需求的时候,我就想,甲方是不是把这个系统当作了微信公众号的那些投票,我这是赤果果的 web 系统啊,和那些微信公众号能相提并论吗?不能。
一开始我的切入点是,获取那些访问用户的 ip,并记录保存。然后在数据库进行数据过期删除操作。
然而,难度在于1.在自己本地不能进行多用户访问获取 ip 的操作;2.mongo 数据库是可以设置过期时间自动删除列数据,但有局限且我自己尝试并没有成功
后来,明白了要从 cookie 入手的,只有这样才能做到设置 cookie 存在的时间为一天,以及投票行为的保留
jquery.cookie.js 为一把利器,度娘搜一下,前辈们的教学都很清楚。
我这里应用的是,当点击投票按钮之后,设置唯一的 cookie,只要再次点击任何投票按钮之后,判断这个唯一的 cookie 是否为空即可。
{% for v in video1 %}
$("#zan-{{ v.id }}").click(function () {
if ( $.cookie("grade1") != null){
alert('今日已投票,请退出');
}
else {
if (this.name == "iconfont zan") {
this.innerHTML = "<i class='iconfont unzan'></i>";
this.name = "iconfont unzan";
var likes = {{ v.like_num }} +1;
var url = "{{ url_for('grade.make_likes', id=project.id) }}";
var data_dic = {
'like': likes,
'video': '{{ v.id }}'
};
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data_dic),
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
success: function (data) {
window.history.back();
}
});
$.cookie("grade1", "weikeshipin", {expires:1});
alert("投票成功");
}
}
});