注意:
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 封裝發布 委託可以在其他類進行訪問,而事件可以確保只有包容類...