在做 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)
当我提交用户名时,只显示“欢迎”。我错过了什么?
最佳答案
关于 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)
您可以将用户名存储在某处,以便它在请求之间保持不变(即内存缓存、 session /cookie、ndb 等)。
关于python - 新手,对原始的网络表单感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645431/