我正在内部应用程序上实现一个评论系统(使用Python / Flask / WTForms),它允许使用评论,并在每个评论下提供单一级别的子评论。
使用简单的WTForm类,注释可以正常工作,如:
class CommentForm(Form): comment = TextAreaField('Comment',validators = [DataRequired()])
然后调用Jinja2模板。
问题是如何实施'sub'评论。这是Subcomment和父Comment之间基本的多对一外键关系。挑战在于给定屏幕上可以有多个评论,但只有一个评论表单。但是,每个注释都有子注释,因此需要在屏幕上多次呈现子注释表单(在每个注释下),我预计渲染和表单提交都会发生冲突(在这里使用WTForms)。
该模型与Stackoverflow非常相似,其中有一个问题>许多与问题相关的评论>许多与每条评论相关的评论。
简单地不使用WTForms用于子注释并公开一个简单的REST API并旋转一点AJAX以将子注释提交到REST端点会更容易吗?
答案 0 :(得分:0)
是的,只在需要时创建表单比向客户端发送N + 1表单(其中N是注释数量)要简单得多 - 但是,如果您正在考虑采用渐进增强方法那就是你需要做的。
在这种情况下,您只是将数据转换为表单,并在服务器端处理响应:
class CommentForm(Form):
parent_id = IntegerField(widget=HiddenWidget)
comment = TextAreaField("Comment", validators=[InputRequired()])
# Then, in your view handler
comments = get_comment_list()
comments = [CommentForm(comment.id, comment.text) for comment in comments]
return render_template(article=article, comments=comments)
# And in your "comment" endpoint you simply handle the comment
comment = CommentForm(request.post)
# This shouldn't be necessary, but it's just an example of figuring out
# what's going on from the data provided
if comment.parent_id.data:
# Insert into comment chain
else:
# It is a rootless comment