Python 新手,被原始web表单弄糊涂了

Python 新手,被原始web表单弄糊涂了,python,http,google-app-engine,Python,Http,Google App Engine,我在做家庭作业时,发现自己完全糊涂了。以下是我的代码的简化版本: import webapp2 form = ''' <h1>Signup</h1> <form method='post'> Username <input type='text' name='username'>%(usr)s<br> <br> <input type='submit'> </form> '''

我在做家庭作业时,发现自己完全糊涂了。以下是我的代码的简化版本:

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)
导入webapp2
形式='''
报名
用户名%(usr)s

''' 类主页(webapp2.RequestHandler): def写入表单(self,usr=''): self.response.write(格式%{'usr':usr}) def get(自我): self.write_form() def post(自我): user=self.request.get('username') 如果用户: self.redirect(“/welcome”) 其他: self.get() 类WelcomePage(webapp2.RequestHandler): def get(自我): user=self.request.get('username') self.response.out.write('Welcome,%s'%user)) app=webapp2.WSGIApplication([('/',主页),('/welcome',WelcomePage)],debug=True)
当我提交用户名时,只显示“欢迎”。我错过了什么

self.redirect('/welcome')
上,您的
self.request.get('username')
数据丢失且未传递给:

class WelcomePage(webapp2.RequestHandler):
    def get(self):
        user = self.request.get('username')
因此,您的用户名为空,这是您提供的代码的预期行为

有很多方法可以解决这个问题(取决于您的要求),但有些方法是:

  • 您可以立即显示欢迎消息,而无需重定向

  • 您可以直接发布到
    /
    (即
    )而不是发布到
    /
    ),如果那里的用户名为空,则您可以重定向回
    /
    上的表单

  • 重定向时将用户名作为GET参数传递,即
    self.redirect('/welcome?username='+user)

  • 您可以将用户名存储在某个位置,使其在请求之间保持不变(即memcache、会话/cookie、ndb等)


正如@Mihail Russu所注意到的,
用户名在
自我重定向('/welcome')
过程中丢失。最适合我的解决方案是将
self.redirect('/welcome')
替换为
self.redirect('/welcome?username='+user)

即使我不喜欢你建议的解决问题的方法:@mydaemon,当然,这些只是针对这一特定问题的快速解决方法,但请随意编辑我的帖子,指出哪些建议不应用于什么推理@Mihail Russu,我的评论在编辑时被删掉;我注意到你用重定向编辑了答案并添加了用户名。我不喜欢向新开发人员建议可能的解决方案,这些解决方案会把代码搞得一团糟,或者它们不是正确的做法,仅此而已。但这个答案对op很有用。