Django點贊的實現示例
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 %} <div> 用戶名:{{item.user.username}} <a id="id{{item.id}}"> <svg class="icon" aria-hidden="true"> <use xlink:href="#icon-like-fill" rel="external nofollow" ></use> </svg> <span id="nlikes">{{item.likes}}</span> </a> </div> <!-- 請把我寫在這裡 3.js實現 --!> {% endfor %}
3.js實現【!!!註意這段代碼寫在for循環之內】
//ln指likenum【點贊數】,因為點贊記錄是QuerySet,需要從裡邊遍歷 {% if ln %} // 遍歷 {% for l in ln %} // 當當前的discussion在LikeNum記錄裡時,為a標簽添加一個class {% if l.discussion == item %} <script> obj = document.getElementById('id{{item.id}}'); obj.className = 'success'; </script> {% endif %} {%endfor%} {%endif%}
4.css實現
.success { color: #fc5531; text-decoration: none; } a { text-decoration: none; color: #848B96; } a:hover { color: #fc5531; }
這隻是一個大概流程,具體的美化還需要自己實現,不懂得話可以留言來交流!
示意圖【我自己做出來的效果】
到此這篇關於Django點贊的實現示例的文章就介紹到這瞭,更多相關Django 點贊內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Django中外鍵使用總結
- 使用Django框架中ORM系統實現對數據庫數據增刪改查
- Django商城項目註冊功能的實現
- django中操作mysql數據庫的方法
- Django數據映射(一對一,一對多,多對多)