下面回到首頁中,使用一個(gè)賬戶登錄,你肯定已經(jīng)注意到了這里的內(nèi)容:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

沒錯(cuò),現(xiàn)在都是寫死的一些固定信息,其中分享數(shù)量很容易就可以獲取,只需要修改首頁模板:

<p class="text-muted">我已經(jīng)分享<span class="text-danger">{{ current_user.posts.count() }}</span>條心情</p>

這樣就可以顯示,但是關(guān)注和被關(guān)注顯然就不是這么簡單了,首先要思考一下,一個(gè)人可以關(guān)注多個(gè)用戶,而一個(gè)用戶也可以被多個(gè)人關(guān)注,所以,這很明顯是一個(gè)多對(duì)多的關(guān)系,而同時(shí),無論是關(guān)注用戶還是被別人關(guān)注,顯然都是針對(duì)的用戶表,所以,這是一個(gè)典型的單表自關(guān)聯(lián)的多對(duì)多關(guān)系,而多對(duì)多就需要使用關(guān)聯(lián)表進(jìn)行連接,下面創(chuàng)建一個(gè)關(guān)聯(lián)表(models/Follow.py):

from .. import dbfrom datetime import datetimeclass Follow(db.Model):
    __tablename__="follows"
    follorer_id=db.Column(db.Integer,db.ForeignKey("users.id"),primary_key=True)
    follored_id=db.Column(db.Integer,db.ForeignKey("users.id"),primary_key=True)
    createtime=db.Column(db.DateTime,default=datetime.utcnow)

然而這時(shí)候,SQLAlchemy框架是無法直接使用的,如果要使用這個(gè)關(guān)聯(lián)表,需要把它拆解為兩個(gè)標(biāo)準(zhǔn)的一對(duì)多關(guān)系(User.py):

 #關(guān)注我的followers = db.relationship("Follow",foreign_keys=[Follow.followed_id],backref=db.backref("followed",lazy='joined'),lazy="dynamic",cascade="all,delete-orphan")#我關(guān)注的followed = db.relationship("Follow", foreign_keys=[Follow.follower_id], backref=db.backref("follower", lazy='joined'), lazy="dynamic",cascade="all,delete-orphan")

看到這個(gè),有必要解釋一下了:

  1. foreign_keys很明顯是表示外鍵,因?yàn)閒ollowers和followed都是與Follow表進(jìn)行關(guān)聯(lián),為了消除歧義,必須使用foreign指定特定外鍵。

  2. backref的作用是回引Follow模型,即即可從用戶查詢F