2016-04-15 34 views
1

在Udacity作業上工作,我發現自己完全困惑。以下是我的代碼的簡化版本:新手,被原始網頁形式困惑

import webapp2 
form = ''' 
<h1>Signup</h1> 
<form method='post'> 
    Username <input type='text' name='username'>%(usr)s<br> 
    <br> 
    <input type='submit'> 
</form> 
''' 

class MainPage(webapp2.RequestHandler): 
    def write_form(self, usr=''): 
     self.response.write(form % {'usr':usr}) 

    def get(self): 
     self.write_form() 

    def post(self): 
     user = self.request.get('username') 
     if user: 
      self.redirect('/welcome') 
     else: 
      self.get() 

class WelcomePage(webapp2.RequestHandler): 
    def get(self): 
     user = self.request.get('username') 
     self.response.out.write('Welcome, %s' % user) 

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

當我提交用戶名時,只顯示「歡迎」。我錯過了什麼?

回答

2

self.redirect('/welcome')self.request.get('username')數據丟失,不會通過:

class WelcomePage(webapp2.RequestHandler): 
    def get(self): 
     user = self.request.get('username') 

,因此你結束了空的用戶名,所以這是爲你提供的代碼預期的行爲。

有很多方法可以讓周圍的(根據您的要求),但有些是:

  • 您可以顯示歡迎信息後馬上不重定向

  • ,而不是發佈到/你可以直接POST到/welcome(即<form method='post' action='/welcome'>),如果用戶名是空的,那麼你會重定向到表格/

  • 重定向時將用戶名作爲GET參數傳遞,即self.redirect('/welcome?username=' + user)

  • 您可以在某處存儲用戶名,以便它在請求之間持續存在(即, memcache,session/cookie,ndb等)。

+0

即使我不喜歡你建議解決該問題的某些方式,我也會向你提供幫助: – mydaemon

+0

@mydaemon,當然,那些只是快速的解決方案,但這個特定的問題,但隨時編輯我的帖子,以表明不應該使用什麼建議不知道什麼原因 –

+0

對不起@Mihail Russu,我的意見在編輯時被切斷;我注意到你已經編輯了重定向添加用戶名的答案。我不喜歡向新開發人員暗示可能的解決方案,只是搞亂了代碼,或者他們不是正確的做法,就是這樣。但是答案對於操作有用。 – mydaemon

0

爲@Mihail魯蘇注意到,username期間self.redirect('/welcome')丟失。最適合我的解決方案是用self.redirect('/welcome?username=' + user)替換self.redirect('/welcome')