[英]Google app engine - Bugs in the code
My code is this: 我的代码是这样的:
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)
It is literally my first time writing a code for GAE(And im new to python..) larger than 10 lines and, ofcourse, he broke. 从字面上看,这是我第一次为大于10行的GAE(也是python的新手)编写代码,当然,他破产了。 I found several bugs but to absolutely on help as the website still doesnt even load.
我发现了几个错误,但由于网站仍然没有加载,因此绝对无法获得帮助。 Help regarding the code is highly appreciated.
非常感谢您提供有关代码的帮助。 Update: I updated it a little bit more(Changed inheritance of ThankYo) and now the form successfully loads, as soon as i post the data ofcourse it crashes...
更新:我更新了一点(改变了ThankYo的继承),现在表单成功加载,一旦我发布课程数据便崩溃了...
class ThankYo(Mainpage):
should be 应该
class ThankYo(MainPage):
(note the capital P
). (注意大写
P
)。
I found this by looking at the error messages left in the terminal: 我通过查看终端中剩余的错误消息发现了这一点:
% dev_appser File "/home/unutbu/pysrc/project/main.py", line 38, in <module>
...
class ThankYo(Mainpage):
NameError: name 'Mainpage' is not defined
Also change 也改变
self.reply(usererror,passworderror,verifyerror,emailerror)
to 至
self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror)
I found this again by looking at the terminal error message: 我通过查看终端错误消息再次发现了这一点:
File "/home/unutbu/pysrc/project/main.py", line 39, in post
self.reply(usererror, passworderror, verifyerror, emailerror)
NameError: global name 'usererror' is not defined
How to see error messages (from the terminal): 如何查看错误消息(从终端):
There is more than one way to start the GAE server. 启动GAE服务器有多种方法。 The way I do it is by opening a terminal and running
我的方法是打开终端并运行
dev_appserver.py /path/to/project/
The terminal then spews useful error messages. 然后,终端会弹出有用的错误消息。
The last problem is a bit more complex. 最后一个问题要复杂一些。 We are sending error messages to the
reply
method: 我们正在发送错误信息到
reply
方法:
self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror)
But in the reply
method definition we call them user
, password
, verify
and email
. 但是在
reply
方法定义中,我们称它们为user
, password
, verify
和email
。 That causes a bit of cognitive dissonance. 这会导致一些认知失调。 Let's rename them
usererror
, passworderror
, verifyerror
and emailerror
: 让我们将它们重命名为
usererror
, passworderror
, verifyerror
和emailerror
:
def reply(self, usererror, passworderror, verifyerror, emailerror):
Now to check that there are no errors use: 现在要检查是否没有错误,请使用:
if not any(usererror and passworderror and verifyerror and emailerror):
But the page we want to redirect to needs the name of the user! 但是我们要重定向到的页面需要用户名! If we just redirect to
/broksi
: 如果我们只是重定向到
/broksi
:
self.redirect('/broski')
then the ThankYo
handler has no idea what the username is. 然后
ThankYo
处理程序不知道用户名是什么。 self.request.get('username')
would come up blank (return an empty string). self.request.get('username')
将self.request.get('username')
空白(返回一个空字符串)。 So we need to pass along the username to broski
: 因此,我们需要将用户名传递给
broski
:
import urllib
self.redirect('/broski?' + urllib.urlencode(
{'username' : self.username}))
So the code ends up looking like this: 因此,代码最终看起来像这样:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.