Wasim Thabraze
Wasim Thabraze

Reputation: 810

Python | Appengine: What is the bug in my code that is preventing me from getting output as "Welcome, (username of the person)"?

Definitely a beginner question. I'm trying to get the output as 'Welcome, (username of the person)' (say, Welcome, John). But I'm getting the output as just 'Welcome, '. Any help would be highly appreciable.

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)

Upvotes: 1

Views: 64

Answers (1)

mgilson
mgilson

Reputation: 309841

Your welcome handler never actually tries to pull data from the datastore ... It's getting the username from the request -- If you're getting there via the redirect, it would be something like self.redirect('/welcome?username=...').

Of course, this isn't actually what you're trying to do. Generally, you'll want to attach some sort of handle on the datastore entry that you can use to pull it back out later. In this case, you might want to use the users service:

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)

Upvotes: 2

Related Questions