Jestem programistą. noobie i składam prostą stronę rejestracji jako ćwiczenie z użyciem Pythona w silniku GoogleApp.Obiekt 'unicode' nie jest wywoływalny
Gdy formularz rejestracyjny zostanie wypełniony niepoprawnie, program działa poprawnie. Gdy jest wypełniony prawidłowo, to ma przekierowanie do strony dziękuję, ale zamiast tego pojawia się błąd serwera:
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
Moje pytanie jest dwojaki: (1) Co ten błąd oznacza? i (2) Skąd pochodzi?
Oto kod, minus 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)
Podejrzewam, że przypadkowo nadpisałeś self.response obiektem unicode. Kiedy próbuje wywołać to później, próbuje wywołać twój ciąg. – Max
Twoje wcięcie wydaje się po prostu zepsute, a ponieważ jest to Python, trudno jest komukolwiek powiedzieć, jaki masz zamiar. – millimoose