【问题标题】:Pass form values to the next request将表单值传递给下一个请求
【发布时间】: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


    【解决方案1】:

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

    在页面中有一个编辑表单很好。您可以拥有任意数量的表格。顺便说一句,常见的方法是只隐藏某种“模板化”表单,然后您将使用 jQuery os 类似的 JS 库来填充它们。

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

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多