日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Django點贊的實現示例_python

作者:365JHWZGo ? 更新時間: 2022-05-04 編程語言

1.前期準備

用戶models.py

class User(models.Model):
? ? username = models.CharField("用戶名",max_length=10)

點贊models.py
LikeNum的作用在于當有人點贊時可以把它記錄下來,包括點贊者和點贊的內容

# 喜歡數
class LikeNum(models.Model):
? ? user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
? ? discussion = models.ForeignKey(Discussion,null=True,on_delete=models.SET_NULL)
? ? class Meta:
? ? ? ? verbose_name_plural = 'user'

發布models.py
Discusssion的作用在于渲染前端頁面,里邊包括動態發布人和被點贊數量

# 我的討論
class Discussion(models.Model):
? ? user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
? ? likes = models.PositiveIntegerField("喜歡",default=0,editable=False)
? ? class Meta:
? ? ? ? verbose_name_plural = 'Discussion'

views.py

# 討論點贊
def addLikes(request,id):
?? ?# 識別出該登陸者用戶信息
? ? if request.session.get('username') and request.session.get('uid'):
? ? ? ? username = request.session.get('username')
? ? ? ? user = UserInfos.objects.get(username=username)
? ? else:
? ? ?? ?# error 是自己寫的出錯頁面
? ? ?? ?return HttpResponseRedirect('/error')
? ? ?? ?
? ? # 判別點贊的該Discussion是否存在,有可能在你點贊的時候該用戶已經刪除,注意不能簡單的使用if,else當找不到discussion時會出錯
? ? try:
? ? ? ? if Discussion.objects.get(id=id):
? ? ? ? ?? ?# 如果Discussion存在
? ? ? ? ? ? d = Discussion.objects.get(id=id)
? ? ? ? ? ? # 如果User存在
? ? ? ? ? ? if user:
? ? ? ? ? ? ?? ?# 判斷當前用戶是否已經給該Discussion點過贊
? ? ? ? ? ? ?? ?# record 為該記錄,不存在時則自動創建
? ? ? ? ? ? ?? ?# flag 為當前是否操作
? ? ? ? ? ? ? ? record,flag = LikeNum.objects.get_or_create(user=user,discussion=d)
? ? ? ? ? ? ? ? # 如果剛剛創建
? ? ? ? ? ? ? ? if flag:
? ? ? ? ? ? ? ? ? ? d.likes+=1
? ? ? ? ? ? ? ? ? ? d.save()
? ? ? ? ? ? ? ? # 如果沒操作,說明之前點過贊,此時再次點贊說明是要取消點贊
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? d.likes -= 1
? ? ? ? ? ? ? ? ? ? d.save()
?? ??? ??? ??? ? ? ?# 并且刪除掉點贊記錄
?? ??? ? ? ? ? ? ? ?LikeNum.objects.get(user=user,discussion=d).delete()
?? ??? ? ? ? ? ?# 跳轉到發布頁面
? ? ? ? ? ? ? ? return render(request,'page.html',{'page':Discusssion.objects.all(),'ln':LikeNum.objects.fitter(user=user)})
? ? ? ? ? ? else:
? ? ? ? ? ? ?? ?# 如果session中沒有用戶信息,則跳轉到登陸頁面
? ? ? ? ? ? ? ? return redirect('/login') ?
? ? except Exception as e:
? ? ? ? # 否則跳轉到失敗頁面
? ? ? ? return HttpResponseRedirect('/error')

2.html實現

{% for item in page %}
?? ?用戶名:{{item.user.username}} ? ? ? ? ? ? ? ? ?{{item.likes}} ? ?
{% endfor %}

3.js實現【!!!注意這段代碼寫在for循環之內】

//ln指likenum【點贊數】,因為點贊記錄是QuerySet,需要從里邊遍歷
?{% if ln %}?
?// 遍歷
?{% for l in ln %}?
?// 當當前的discussion在LikeNum記錄里時,為a標簽添加一個class
?{% if l.discussion == item %}
?? ?
{% endif %}?
{%endfor%}?
{%endif%}

4.css實現

.success {
? ? color: #fc5531;
? ? text-decoration: none;
}

a {
? ? text-decoration: none;
? ? color: #848B96;
}

a:hover {
? ? color: #fc5531;
}

這只是一個大概流程,具體的美化還需要自己實現,不懂得話可以留言來交流!

示意圖【我自己做出來的效果】

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

原文鏈接:https://blog.csdn.net/qq_44833392/article/details/123234145

欄目分類
最近更新