Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌应用程序引擎-代码中的错误_Python - Fatal编程技术网

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)