2016-05-10 2 views
1

Ich versuche, einen einfachen Blog mit GAE zu erstellen, und ich habe den folgenden Code erstellt (Ich habe die Teile gelöscht, die nicht auf diese Frage bezogen sind):Übergeben von Daten zwischen den Seiten in einer Funktion redirect() in Google App Engine

# LOADING THE TEMPLATE INTO THE JINJA ENVIRONMENT 
template_dir = os.path.join(os.path.dirname(__file__), 'templates') 
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape = True) 

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

# GOOGLE DATASTORE DATABASE 
class Entries(db.Model): 
    title = db.StringProperty(required = True) 
    body = db.TextProperty(required = True) 
    created = db.DateTimeProperty(auto_now_add = True) 

# HANDLER FUNCTIONS 
class SignUp(webapp2.RequestHandler): 
    def get(self): 
     self.response.write(render_str('signup.html')) 

    def post(self): 
     have_error = False 
     username = self.request.get('username') 
     password = self.request.get('password') 
     verify = self.request.get('verify') 
     email = self.request.get('email') 

     params = dict(username = username, email = email) 

     if not valid_username(username): 
      params['error_username'] = "That's not a valid username." 
      have_error = True 

     if not valid_password(password): 
      params['error_password'] = "That wasn't a valid password." 
      have_error = True 
     elif password != verify: 
      params['error_verify'] = "Your passwords didn't match." 
      have_error = True 

     if not valid_email(email): 
      params['error_email'] = "That's not a valid email." 
      have_error = True 

     pwhash = make_secure_val(password) 
     self.response.headers.add_header('Set-Cookie', 'uid: %s' % str(pwhash)) 

     if have_error: 
      self.response.write(render_str('signup.html', **params)) 
     else: 
      self.redirect('/welcome') 

class Welcome(webapp2.RequestHandler): 
    def get(self): 
     self.response.write(render_str('welcome.html')) 

# APP HANDLERS 
app = webapp2.WSGIApplication([('/', MainPage), 
          ('/newpost', NewPost), 
          ('/newpost/(\d+)', Permalink), 
          ('/signup', SignUp), 
          ('/welcome', Welcome) 
          ], debug=True) 

signup.html ist eine nur einfache Form, die die username, password, password erneut zu überprüfen und eine optionale email nimmt.

make_secure_val() ist nur eine Hash-Funktion, die eine HMAC Hash-Version der Argument-Zeichenfolge im Format argument|HMAC(argument) zurückgibt.

Also, hier ist meine Frage: Sobald der Benutzer sich anmeldet, möchte ich eine Umleitung zu einer anderen URL /welcome, so dass ich die redirect() Funktion verwenden. Aber ich möchte auch den username Benutzer ausdrucken, der in das Formular auf der Begrüßungsseite eingegeben wurde. Die einzige Möglichkeit, Variablen in einem zu übergeben, besteht darin, die URL über GET zu übergeben. Aber ich möchte nicht, dass die URL den Benutzernamen anzeigt. Ich möchte es als Template-Variable wie in render_str() weitergeben. Aber wenn ich render_str() in der POST Methode von SignUp verwende, ist die URL immer noch /signup.

Wie gebe ich die Daten an eine redirect()?

Antwort