你有多个WTForm实例吗?

时间:2014-09-05 17:36:56

标签: python flask wtforms

我正在内部应用程序上实现一个评论系统(使用Python / Flask / WTForms),它允许使用评论,并在每个评论下提供单一级别的子评论。

使用简单的WTForm类,注释可以正常工作,如:

class CommentForm(Form):     comment = TextAreaField('Comment',validators = [DataRequired()])

然后调用Jinja2模板。

问题是如何实施'sub'评论。这是Subcomment和父Comment之间基本的多对一外键关系。挑战在于给定屏幕上可以有多个评论,但只有一个评论表单。但是,每个注释都有子注释,因此需要在屏幕上多次呈现子注释表单(在每个注释下),我预计渲染和表单提交都会发生冲突(在这里使用WTForms)。

该模型与Stackoverflow非常相似,其中有一个问题>许多与问题相关的评论>许多与每条评论相关的评论。

简单地不使用WTForms用于子注释并公开一个简单的REST API并旋转一点AJAX以将子注释提交到REST端点会更容易吗?

1 个答案:

答案 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