2012-07-31 25 views
7

私はWeb開発者です。 noobieと私は、GoogleApp EngineでPythonを使用して簡単なサインアップページを作成しています。'unicode'オブジェクトは呼び出し可能ではありません

申し込みフォームが正しく記入されていない場合、プログラムは正常に動作します。それは正しく記入だと、お礼のページにリダイレクトすることになっていますが、代わりに私は、サーバーのエラーを取得:

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 

私の質問は2倍である:(1)このエラーが何を意味するのでしょうか? (2)それはどこから来ていますか?

は、ここでのコードですが、マイナスの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) 
+3

私はあなたが誤ってunicodeオブジェクトでself.responseを上書きしたと思われます。後でそれを呼び出そうとすると、あなたの文字列を呼び出そうとします。 – Max

+0

あなたのインデントは途中でかなり壊れているように見えますが、これはPythonのため、他の誰かがあなたの意図が何であるかを伝えるのは難しいです。 – millimoose

答えて

5

webapp2をハンドラ・メソッド(取得/ポスト)to be callableからのリターンを期待しています。その理由は、(self.response、要求の環境を変更する)応答オブジェクトを変更するのではなく、呼び出し可能な応答の形式で作業単位を作成することですフレームワークによってapplied onto the environment of the request

return usernameフレームワークは、uncallable unicodeオブジェクト(username)を呼び出しようとします。

関連する問題