所以,我做了一些基准测试,看看应用程序可以处理多少请求。事实证明,当涉及数据库操作时,在超时后续请求之前可以处理不超过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]
)
当您在项目页面中单击编辑时执行此代码,如下所示:
{% 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 %}
正如您所看到的,已经存在具有所需值的隐藏输入,但它们用于评论。
是否可以做这样的事情?:
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?但我怀疑这是非常不理想的,容易出错。
答案 0 :(得分:0)
典型的解决方案是使用像Flask-Cache这样的缓存层和memcached服务器来缓存最近访问过的数据。
在页面中有一个编辑表单是好的。您可以拥有任意数量的表单。顺便说一句,常见的方法是只有某些模板化的&#34;隐藏的表单,然后使用jQuery os类似的JS库填充。
在您的示例中,您还将content
字段隐藏起来。为什么?有人可能会修改您的来源并更改内容。 :)