第十三章 使用者評論(一)

2021-10-03 17:15:50 字數 2601 閱讀 3108

注意:

user模型與comment模型做為1這一側,還需要定義關係(通常我們在多一側定義外來鍵後,選擇在一這一側定義關係):

class user(usermixin, db.model):

__tablename__ = "users"

...comments = db.relationship('comment', backref='author', lazy='dynamic')

class post(db.model):

__tablename__ = 'posts'

...comments = db.relationship('comment', backref='post', lazy='dynamic')

class commentform(flaskform):

body = stringfield('', validators=[datarequired()])

submit = submitfield('submit')

為了支援表單提交,/post/路由要做些修改:

@main.route('/post/', methods=['get', 'post'])

def post(id):

post = post.query.get_or_404(id)

form = commentform()

if current_user.can(permission.comment) and form.validate_on_submit():

comment = comment(body=form.body.data, post=post, author=current_user._get_current_object())

db.session.add(comment)

db.session.commit()

flash('your comment has been published.')

return redirect(url_for('.post', id=post.id, page=-1))

page = request.args.get('page', 1, type=int)

if page == -1:

# 計算總頁數

page = (post.comments.count() - 1) // per_page + 1

pagination = post.comments.order_by(comment.timestamp.asc()).paginate(page, per_page, error_out=false)

comments = pagination.items

return render_template('post.html', posts=[post], form=form, comments=comments, pagination=pagination)

注意:

在使用者資料頁面:

第十三章 併發

13.1 動機 13.2 基本執行緒 如果必須要控制現成的執行順序,最好是根本不用執行緒,而是自己編寫特定順序彼此控制的協作子程式。繼承thread類或者實現runnable介面。內部類實現。13.3 共享受限資源 1 如果要對類中的某個方法進行同步控制,最好同步所有方法。如果忽略了其中乙個,通常很...

第十三章 類

1.類簡單地說是乙個性的資料型別。類當中有資料成員,和成員函式。類的基本思想就是體現出資料的抽象和封裝。2.這裡只需要說明乙個問題即可 就是類成員函式的const型別 class screen public const int get const int i const int j const 這裡...

第十三章 事件

1 事件的作用 事件是對委託的封裝,如同屬性對字段的封裝。封裝後可以在委託上實現更複雜的邏輯。1.1 封裝訂閱 委託允許使用 對其進行賦值,但向乙個委託例項賦值多個委託時,使用 會造成覆蓋之前的委託。事件只支援 或 對事件進行賦值 1.2 封裝發布 委託可以在其他類進行訪問,而事件可以確保只有包容類...