【发布时间】:2014-04-20 12:58:15
【问题描述】:
所以,我做了一些基准测试,看看该应用可以处理多少请求。事实证明,当涉及数据库操作时,在后续请求超时之前可以处理不超过 500-560 个请求/秒,而如果没有数据库层,则很容易达到 1000-1100 个请求/秒。
我仍然没有设法削减大多数页面的数据库成本(我正在努力),但有一个可以削减这种开销的地方:编辑页面。
当您访问 http://website.com/edit 时,我有以下视图。它所做的是在 url 中获取 id 参数并使用它从 db (MongoDB) 中找到帖子,然后将迭代的输出传递给模板:
def edit(id):
item = mongo.db.documents.find_one({'_id': id})
doc = item.iteritems()
return render_template('edit.html',
content=item[0],
title=item[3],
url=item[2],
id=post[1]
)
在item页面点击edit时执行此代码,代码如下:
{% block body %}
<a href="/doc/{{ url }}/">{{ title }}</a>
<p>{{ content }}</p>
<div>
<a href=delete>Delete</a>
<a href=edit>Edit</a>
</div>
<form method="post" action="/post">
<input type="hidden" name="id" value="{{ id }}" />
<input type="hidden" name="url" value="{{ url }}" />
<input type="hidden" name="title" value="{{ title }}" />
<input type="hidden" name="content" value="{{ content }}" />
<div>
<h5>Your Name :</h5>
<input type="text" name="name" id="add_comment_author" />
</div>
<div>
<h5>Your Thought :</h5>
<textarea name="content id="add_comment_content"></textarea>
</div>
<input type="submit" value="Send" />
</form>
{% endblock %}
如您所见,已经存在具有所需值的隐藏输入,但它们用于 cmets。
有没有可能做这样的事情?:
def edit(id):
#item = mongo.db.documents.find_one({'_id': id})
#doc = item.iteritems()
doc = request.get.previous()
return render_template('edit.html',
content=doc[0],
title=doc[3],
url=doc[2],
id=doc[1]
)
或者,是否可以在一个页面中有两个 POST(一个用于发送评论,另一个用于将值发送到编辑页面?
或者也许使用 Flash?但我怀疑这是非常不理想的并且容易出现错误。
【问题讨论】:
标签: python flask request pymongo gevent