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等)
用户名在自我重定向('/welcome')
过程中丢失。最适合我的解决方案是将self.redirect('/welcome')
替换为self.redirect('/welcome?username='+user)
即使我不喜欢你建议的解决问题的方法:@mydaemon,当然,这些只是针对这一特定问题的快速解决方法,但请随意编辑我的帖子,指出哪些建议不应用于什么推理@Mihail Russu,我的评论在编辑时被删掉;我注意到你用重定向编辑了答案并添加了用户名。我不喜欢向新开发人员建议可能的解决方案,这些解决方案会把代码搞得一团糟,或者它们不是正确的做法,仅此而已。但这个答案对op很有用。