Soy un desarrollador web. noobie y estoy armando una página de registro simple como práctica usando Python en GoogleApp Engine.El objeto 'unicode' no se puede llamar
Cuando el formulario de registro se llena de manera incorrecta, el programa funciona bien. Cuando se ha llenado correctamente, se supone que debe redirigir a una página de agradecimiento que sino me sale un error del servidor:
Internal Server Error
The server has either erred or is incapable of performing the requested operation.
Traceback (most recent call last):
File "/Users/bendavidow/Desktop/Stuff/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEng ine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1547, in __call__
return response(environ, start_response)
TypeError: 'unicode' object is not callable
Mi pregunta es doble: (1) ¿Qué significa este error? y (2) ¿De dónde viene?
Aquí está el código, menos el html:
import webapp2
import re
import cgi
def escape_html(s):
return cgi.escape(s, quote = True)
class MainPage(webapp2.RequestHandler):
def write_form(self, username = "", email = "", username_error = "", password_error = "", verify_error = "", email_error = ""):
self.response.out.write(form %{"username": escape_html(username), "email": escape_html(email), "username_error": username_error, "password_error": password_error, "verify_error": verify_error, "email_error": email_error})
def get(self):
self.write_form()
def post(self):
username = self.request.get('username')
password = self.request.get('password')
verify = self.request.get('verify')
email = self.request.get('email')
username_check = re.search(r'^[a-zA-Z0-9_-]{3,20}$', username)
password_check = re.search(r'^.{3,20}$', password)
email_check = re.search(r'^[\S][email protected][\S]+\.[\S]+$',email)
username_error, password_error, email_error, verify_error = "", "", "", ""
if not username_check:
username_error = "Invalid Username"
if not password_check:
password_error = "Invalid Password"
if email != '' and not email_check:
email_error = "Invalid Email"
if password != verify:
verify_error = "Passwords do not match"
if username_error or password_error or email_error or verify_error:
self.write_form(username, email, username_error, password_error, verify_error, email_error)
else:
return username
self.redirect("/thanks")
class ThanksHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write("Welcome " + username)
app = webapp2.WSGIApplication([('/', MainPage), ('/thanks',ThanksHandler)], debug = True)
sospecho algún lugar usted ha sobrescrito accidentalmente self.response con un objeto Unicode. Cuando intenta llamarlo más tarde, intenta llamar a su cadena. – Max
Tu sangrado parece bastante roto por cierto, y siendo Python, es difícil para cualquier otra persona decir cuál fue tu intención. – millimoose