django 實現關注功能以及只看關注者功能

2021-08-18 04:05:43 字數 1698 閱讀 4997

關注功能

關注是針對於user模型的,乙個使用者可以關注多個使用者,乙個使用者也可以被多個使用者關注,屬於多對多關係。而且這個關係的兩邊是同乙個模型,都是user。所以採用乙個中間表來實現。

新建乙個follow模型,有兩個字段,乙個是被關注者,乙個是粉絲,兩個欄位都是user的外來鍵,此時注意需要在字段裡填寫related_name屬性,這個屬性的官方解釋如下:

意思是related_name是外來鍵的源模型用來獲取該模型的方法,因為follow中兩個外來鍵的源模型都是user,這樣會引發乙個錯誤,所以通過設定不同的related_name來避免。follow表設計如下:

class follow(models.model):

follow = models.foreignkey(user, related_name="follow_user")

fan = models.foreignkey(user, related_name="fan_user")

def __str__(self):

return "follow:{},fan:{}".format(self.follow,self.fan)

follow欄位是被關注者,fan欄位是粉絲,所以資料表明fan關注了follow。

獲取關注者和自己的文章

文章模型很簡單,具有乙個關鍵作者的外來鍵。

class post(models.model):

user = models.foreignkey(user)

title = models.charfield(max_length=100)

body = models.textfield()

pub_date = models.datetimefield(auto_now=true)

def __str__(self):

return self.title

所以思路是,先獲取登入使用者的所有關注者,再從每個關注者獲取所有文章,僅僅這個就很難用django的查詢語句去實現了,況且還要再加上登入者自己的文章,所以選擇用sql語句去查詢。

django提供了 raw 方法來執行原生sql語句,只需要將原生語句寫成字串,放入raw中就行了

# 關注人的文章

follow_post_list = post.objects.raw('''select * from main_post where user_id in (

select follow_id from yonghu_follow where fan_id = %s)

union

select * from main_post where user_id = %s

order by (-pub_date)

'''%(user.id, user.id))

注意不要像我這樣用 %去傳參, 直接寫在列表裡,raw會自動傳進去,已避免sql注入。

通過 raw 返回的是乙個懶查詢,類似列表生成器,只有被呼叫時才會進行查詢返回資料。

至此實現只看關注者的功能

樣式功能以及設計功能

目錄 設計樣式 樣式選單功能主要是用來簡化的重複性的文字標題格式處理工作,利用樣式選單裡面的選項卡選擇適合的樣式對目標標題進行修改。樣式選單功能在開始選單裡面。1.單行修改標題只需要將游標放在標題的最後。2.選擇點選合適的標題樣式。1.選中要修改的多行標題。2.選擇點選合適的標題樣式。檢視標題目錄可...

Zookeeper的功能以及工作原理

1.zookeeper是什麼?zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,它是集群的管理者,監視著集群中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效 功能穩定的系統提供給使用者 2.zook...

Zookeeper的功能以及工作原理

前言前面有一篇部落格講到了spring boot整合jms的使用 但是最近遇到乙個需求,需要同時使用jms的佇列和topic,於是就有了下面的測試 消費者 解決方案如下 configuration enablejms public class jmsconfig bean public jmslis...