【问题标题】:Python: Add data to database but cannot show in front before flushPython:将数据添加到数据库但在刷新之前无法显示在前面
【发布时间】:2017-04-29 14:58:00
【问题描述】:

这是我的代码:

模板.py

import os

import webapp2
import jinja2

from google.appengine.ext import db


template_dir = os.path.join(os.path.dirname(__file__), "templates")
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_dir),
                           autoescape=True)

class Handler(webapp2.RequestHandler):
    def write(self, *arg, **kwargs):
        self.response.out.write(*arg, **kwargs)

    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)

    def render(self, template, **kwargs):
        self.write(self.render_str(template, **kwargs))


class Art(db.Model):
    title = db.StringProperty(required = True)
    art = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)


class MainPage(Handler):
    def render_front(self, title="", art="", error=""):
        arts = db.GqlQuery("SELECT * FROM Art ORDER BY created DESC")
        self.render("front.html", title=title, art=art, error=error, arts=arts)

    def get(self):
        self.render_front()

    def post(self):
        title = self.request.get("title")
        art = self.request.get("art")

        if title and art:
            a = Art(title=title, art=art)
            a.put()

            self.redirect("/")
        else:
            error = "We need both a title and some artwork!"
            self.render_front(title, art, error)


app = webapp2.WSGIApplication([('/', MainPage)], debug=True)

front.html

<!DOCTYPE html>
<html>
<head>
    <title>/ascii/</title>
</head>
<body>
<h1>/ascii/</h1>

<form method="post">
    <label>
        <div>title</div>
        <input type="text" name="title" value="{{ title }}">
    </label>

    <label>
        <div>art</div>
        <textarea name="art">{{ art }}</textarea>
    </label>

    <div class="error">{{ error }}</div>

    <input type="submit">
</form>

<hr>
{% for art in arts %}
    <div class="art">
        <div class="art-title">{{ art.title }}</div>
        <pre class="art-body"> {{ art.art }}</pre>
    </div>
{% endfor %}

</body>
</html>

当我在“标题”、“艺术”中输入一些文本并按“提交”时,它应该会发布我的大部分输入并返回数据库查询的结果。但我必须刷新页面,否则看不到我所拥有的发帖。

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore webapp2


    【解决方案1】:

    可能看起来刷新有帮助,但实际上是时间的流逝,而“最终一致性”正在赶上。

    详情见https://cloud.google.com/datastore/docs/concepts/structuring_for_strong_consistency

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多