2013-04-01 3 views
0

Мой код заключается в следующем:Google App Engine - Ошибки в коде

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][email protected][\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) 

Это буквально мой первый раз писать код для GAE (и им новое для питона ..) больше, чем 10 строк и, конечно , он сломал. Я нашел несколько ошибок, но абсолютно помог, так как веб-сайт по-прежнему даже не загружается. Помощь в отношении кода очень ценится. Обновление: Я обновил его немного больше (Измененная Наследование ThankYo) и теперь форма успешно загружает, как только я отправляю данные конечно он выходит из строя ...

ответ

1
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 

изменить Также

self.reply(usererror,passworderror,verifyerror,emailerror) 

в

self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror) 

Я нашел это снова, глядя на сообщение терминала об ошибке:

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/ 

Терминал затем выводит полезные сообщения об ошибках.


Последняя проблема немного сложнее. Мы посылаем сообщения об ошибках метода reply:

self.reply(self.usererror, self.passworderror, self.verifyerror, self.emailerror) 

Но в определении reply метода мы называем их user, password, verify и email. Это вызывает немного когнитивного диссонанса. Давайте переименовать их 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][email protected][\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) 
+0

Я установил, что, вместо того, чтобы было это inherit.Although одно, как Вы видите терминал? Это вроде глупо, но я новичок –

+0

Спасибо, почти там. Теперь все остальное работает только тогда, когда я отправляю правильные данные, он все еще просто переопределяет форму (я надеялся, что она перенаправит мою модную страницу приветствия D :). –

+0

Обновление: Думаю, я нашел роковую ошибку, я ее установил! = Когда это должно быть == -.- –