Python 谷歌应用程序引擎-代码中的错误
我的代码是:Python 谷歌应用程序引擎-代码中的错误,python,Python,我的代码是: import webapp2 import re form = """<html> <form method=post> <input name="username"><div id=div>%s</div><br> <input name="password"><div id=div>%s</div><br> <input name="verify">
import webapp2
import re
form = """<html>
<form method=post>
<input name="username"><div id=div>%s</div><br>
<input name="password"><div id=div>%s</div><br>
<input name="verify"><div id=div>%s</div><br>
<input name="email"><div id=div>%s</div>
<input type="submit">
</form>
</html>"""
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
self.response.write(form % ('','','',''))
def reply(self,user,password,verify,email):
if not user and password and verify and email:
self.redirect('/broski')
else:
self.response.write(form % (user,password,verify,email))
def post(self):
self.usererror = ''
if not re.compile(r"^[a-zA-Z0-9_-]{3,20}$").match(self.request.get('username')):
self.usererror = "That's not a valid username."
self.passworderror = ''
if not re.compile(r"^.{3,20}$").match(self.request.get('password')):
self.passworderror = "That wasn't a valid password."
self.verifyerror = ''
if self.request.get('verify') != self.request.get('password') and self.request.get('password') != '':
self.verifyerror = "Your passwords didn't match."
self.emailerror = ''
if not re.compile(r"^[\S]+@[\S]+\.[\S]+$").match(self.request.get('email')):
self.emailerror = "That's not a valid email."
self.reply(usererror,passworderror,verifyerror,emailerror)
class ThankYo(webapp2.RequestHandler):
def get(self):
self.response.write('Welcome, ' + self.request.get('username')+'!')
app = webapp2.WSGIApplication([('/', MainPage),('/broski', ThankYo)],
debug=True)
导入webapp2
进口稀土
form=”“”
%s
%s
%s
%
"""
类主页(webapp2.RequestHandler):
def get(自我):
self.response.headers['Content-Type']='text/html'
self.response.write(表单%('','',''))
def回复(自我、用户、密码、验证、电子邮件):
如果不是用户和密码,请验证并发送电子邮件:
self.redirect(“/broski”)
其他:
self.response.write(表单%(用户、密码、验证、电子邮件))
def post(自我):
self.usererror=“”
如果不重新编译(r“^[a-zA-Z0-9_-]{3,20}$”).match(self.request.get('username')):
self.usererror=“这不是有效的用户名。”
self.passworderror=“”
如果不重新编译(r“^.{3,20}$”).match(self.request.get('password')):
self.passworderror=“这不是有效的密码。”
self.verifyerror=“”
如果self.request.get('verify')!=self.request.get('password')和self.request.get('password')!='':
self.verifyerror=“您的密码不匹配。”
self.emailerror=“”
如果不重新编译(r“^[\S]+@[\S]+\.[\S]+$”).match(self.request.get('email')):
self.emailerror=“这不是有效的电子邮件。”
self.reply(usererror、passworderror、verifyerror、emailerror)
类ThankYo(webapp2.RequestHandler):
def get(自我):
self.response.write('Welcome',+self.request.get('username')+'!'))
app=webapp2.WSGIApplication([('/',主页),('/broski',谢谢],
debug=True)
这是我第一次为GAE编写超过10行的代码(我对python还是个新手),当然,他打破了。
我发现了几个bug,但由于网站仍然没有加载,我完全依赖于帮助。
非常感谢有关代码的帮助。
更新:我更新了一点(更改了ThankYo的继承),现在表单成功加载,当然,一旦我发布了数据,表单就会崩溃
class ThankYo(Mainpage):
应该是
class ThankYo(MainPage):
(注意大写字母p
)
我通过查看终端中留下的错误消息发现了这一点:
% dev_appser File "/home/unutbu/pysrc/project/main.py", line 38, in <module>
...
class ThankYo(Mainpage):
NameError: name 'Mainpage' is not defined
到
我通过查看终端错误消息再次发现了这一点:
File "/home/unutbu/pysrc/project/main.py", line 39, in post
self.reply(usererror, passworderror, verifyerror, emailerror)
NameError: global name 'usererror' is not defined
如何查看错误消息(来自终端): 启动GAE服务器的方法不止一种。我这样做的方式是打开一个终端并运行
dev_appserver.py /path/to/project/
然后,终端会发出有用的错误消息
最后一个问题有点复杂。我们正在向
回复方法发送错误消息:
self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror)
但是在回复
方法定义中,我们称它们为用户
,密码
,验证
和电子邮件
。这会导致一些认知失调。让我们将它们重命名为usererror
,passworderror
,verifyerror
和emailerror
:
def reply(self, usererror, passworderror, verifyerror, emailerror):
现在,要检查是否存在错误,请使用:
if not any(usererror and passworderror and verifyerror and emailerror):
但是我们要重定向到的页面需要用户名!
如果我们只是重定向到/broksi
:
self.redirect('/broski')
然后,ThankYo
处理程序不知道用户名是什么self.request.get('username')
将显示为空(返回空字符串)。因此,我们需要将用户名传递给broski
:
import urllib
self.redirect('/broski?' + urllib.urlencode(
{'username' : self.username}))
因此,代码最终如下所示:
import urllib
import webapp2
import re
form = """<html>
<form method=post>
<input name="username"><div id=div>%s</div><br>
<input name="password"><div id=div>%s</div><br>
<input name="verify"><div id=div>%s</div><br>
<input name="email"><div id=div>%s</div>
<input type="submit">
</form>
</html>"""
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
self.response.write(form % ('', '', '', ''))
def reply(self, usererror, passworderror, verifyerror, emailerror):
if not any(usererror and passworderror and verifyerror and emailerror):
self.redirect('/broski?' + urllib.urlencode(
{'username' : self.username}))
else:
self.response.write(form % (user, password, verify, email))
def post(self):
self.username = self.request.get('username')
self.password = self.request.get('password')
self.verify = self.request.get('verify')
self.email = self.request.get('email')
self.usererror = ''
if not re.compile(r"^[a-zA-Z0-9_-]{3,20}$").match(self.username):
self.usererror = "That's not a valid username."
self.passworderror = ''
if not re.compile(r"^.{3,20}$").match(self.password):
self.passworderror = "That wasn't a valid password."
self.verifyerror = ''
if self.verify != self.password and self.password != '':
self.verifyerror = "Your passwords didn't match."
self.emailerror = ''
if not re.compile(r"^[\S]+@[\S]+\.[\S]+$").match(self.email):
self.emailerror = "That's not a valid email."
self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror)
class ThankYo(MainPage):
def get(self):
self.response.write('Welcome, ' + self.request.get('username') + '!')
app = webapp2.WSGIApplication([('/', MainPage), ('/broski', ThankYo)],
debug=True)
导入urllib
导入webapp2
进口稀土
form=”“”
%s
%s
%s
%
"""
类主页(webapp2.RequestHandler):
def get(自我):
self.response.headers['Content-Type']='text/html'
self.response.write(表单%('','',''))
def回复(self、usererror、passworderror、verifyerror、emailerror):
如果没有(usererror和passworderror以及verifyerror和emailerror):
self.redirect('/broski?'+urllib.urlencode(
{'username':self.username})
其他:
self.response.write(表单%(用户、密码、验证、电子邮件))
def post(自我):
self.username=self.request.get('username'))
self.password=self.request.get('password'))
self.verify=self.request.get('verify')
self.email=self.request.get('email'))
self.usererror=“”
如果不重新编译(r“^[a-zA-Z0-9_-]{3,20}$”)。匹配(self.username):
self.usererror=“这不是有效的用户名。”
self.passworderror=“”
如果不重新编译(r“^.{3,20}$”).match(self.password):
self.passworderror=“这不是有效的密码。”
self.verifyerror=“”
如果自我验证!=self.password和self.password!='':
self.verifyerror=“您的密码不匹配。”
self.emailerror=“”
如果不重新编译(r“^[\S]+@[\S]+\.[\S]+$”)。匹配(self.email):
self.emailerror=“这不是有效的电子邮件。”
self.reply(self.usererror、self.passworderror、self.verifyerror、self.emailerror)
类ThankYo(主页):
def get(自我):
self.response.write('Welcome',+self.request.get('username')+'!'))
app=webapp2.WSGIApplication([('/',主页),('/broski',谢谢],
debug=True)
我修复了这个问题,而是让它继承。尽管有一件事,您如何看待终端?这有点傻,但我是纽坦克斯,快到了。其他一切现在都正常工作了,只是当我提交有效的详细信息时,它仍然只是重新呈现表单(我希望它会重定向到我喜欢的欢迎页面D:)。更新:我想我发现了致命错误,我将其设置为!=当它应该是==--
import urllib
self.redirect('/broski?' + urllib.urlencode(
{'username' : self.username}))
import urllib
import webapp2
import re
form = """<html>
<form method=post>
<input name="username"><div id=div>%s</div><br>
<input name="password"><div id=div>%s</div><br>
<input name="verify"><div id=div>%s</div><br>
<input name="email"><div id=div>%s</div>
<input type="submit">
</form>
</html>"""
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
self.response.write(form % ('', '', '', ''))
def reply(self, usererror, passworderror, verifyerror, emailerror):
if not any(usererror and passworderror and verifyerror and emailerror):
self.redirect('/broski?' + urllib.urlencode(
{'username' : self.username}))
else:
self.response.write(form % (user, password, verify, email))
def post(self):
self.username = self.request.get('username')
self.password = self.request.get('password')
self.verify = self.request.get('verify')
self.email = self.request.get('email')
self.usererror = ''
if not re.compile(r"^[a-zA-Z0-9_-]{3,20}$").match(self.username):
self.usererror = "That's not a valid username."
self.passworderror = ''
if not re.compile(r"^.{3,20}$").match(self.password):
self.passworderror = "That wasn't a valid password."
self.verifyerror = ''
if self.verify != self.password and self.password != '':
self.verifyerror = "Your passwords didn't match."
self.emailerror = ''
if not re.compile(r"^[\S]+@[\S]+\.[\S]+$").match(self.email):
self.emailerror = "That's not a valid email."
self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror)
class ThankYo(MainPage):
def get(self):
self.response.write('Welcome, ' + self.request.get('username') + '!')
app = webapp2.WSGIApplication([('/', MainPage), ('/broski', ThankYo)],
debug=True)