将表单值传递给下一个请求

时间:2014-04-20 12:58:15

标签: python flask request pymongo gevent

所以,我做了一些基准测试,看看应用程序可以处理多少请求。事实证明,当涉及数据库操作时,在超时后续请求之前可以处理不超过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?但我怀疑这是非常不理想的,容易出错。

1 个答案:

答案 0 :(得分:0)

典型的解决方案是使用像Flask-Cache这样的缓存层和memcached服务器来缓存最近访问过的数据。

在页面中有一个编辑表单是好的。您可以拥有任意数量的表单。顺便说一句,常见的方法是只有某些模板化的&#34;隐藏的表单,然后使用jQuery os类似的JS库填充。

在您的示例中,您还将content字段隐藏起来。为什么?有人可能会修改您的来源并更改内容。 :)