Python | Appengine:我的代码中有什么bug阻止我将输出作为;欢迎,(此人的用户名)“;?

Python | Appengine:我的代码中有什么bug阻止我将输出作为;欢迎,(此人的用户名)“;?,python,google-app-engine,Python,Google App Engine,这绝对是个初学者的问题。我试图将输出作为“欢迎,(此人的用户名)”(比如,欢迎,John)。但我得到的结果只是“欢迎”。 任何帮助都是值得赞赏的 import webapp2 from google.appengine.ext import db import os import jinja2 template_dir = os.path.join(os.path.dirname(__file__), 'templates') jinja_env = jinja2.Environment(lo

这绝对是个初学者的问题。我试图将输出作为“欢迎,(此人的用户名)”(比如,欢迎,John)。但我得到的结果只是“欢迎”。 任何帮助都是值得赞赏的

import webapp2
from google.appengine.ext import db
import os
import jinja2

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

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

class BaseHandler(webapp2.RequestHandler):
    def render(self, template, **kw):
        self.response.out.write(render_str(template, **kw))

    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)



class Name(db.Model):
    username = db.StringProperty(required=True)


class MainHandler(BaseHandler):
    def get(self):
        self.render('input.html')
    def post(self):
        username = self.request.get('username')
        a = Name(username=username)
        a.put()

        self.redirect('/welcome')


class WelcomeHandler(BaseHandler):
    def get(self):
        username = self.request.get('username')

        self.render('welcome.html', username = username)



application = webapp2.WSGIApplication([
  ('/', MainHandler),
  ('/welcome',WelcomeHandler)
], debug=True)

您的欢迎处理程序从未实际尝试从数据存储中提取数据。。。它从请求中获取用户名——如果您是通过重定向到达那里的,则类似于
self.redirect(“/welcome?username=…”)

当然,这不是你真正想要做的。通常,您需要在数据存储条目上附加某种句柄,以便稍后将其拉出。在这种情况下,您可能希望使用以下服务:


不确定你在最后一段中得到了什么:按键获取总是保证一致的。@DanielRoseman--是吗?很高兴知道。我从来都不理解“存储以实现强一致性”这一点我将在进一步研究的同时,暂时删除该评论。希望我能记得稍后再来解决…@DanielRoseman--ah。。。我想我现在相信你了——如果我理解正确的话,一个实体在它自己的实体组中,所以直接访问它总是非常一致的。任何get by键都是一致的,因为你不是通过索引访问的。它是否有祖先并不重要,正如你所说的,一个完全指定的键总是包含任何祖先。@TimHoffman——你是说“不一致”是由于实体索引的“缓慢”而产生的,未将实体复制到其他数据中心,以及后续请求可能无法在同一数据中心中处理?在这里学到了很多——很高兴我回答了这个问题:-)
from google.appengine.api import users
from google.appengine.ext import ndb  # Note, I'm using ndb rather than db

class Name(ndb.Model):
    username = ndb.StringProperty()

class MainHandler(BaseHandler):
    def get(self):
        self.render('input.html')
    def post(self):
        user = users.get_current_user()
        username = self.request.get('username')
        a = Name(id=user.id(), username=username)
        a.put()

        self.redirect('/welcome')

class WelcomeHandler(BaseHandler):
    def get(self):
        user = users.get_current_user()
        key = ndb.key(user.id())
        name_entity = key.get()
        self.render('welcome.html', username=name_entity.username)