7

私はウェブ開発者です。noobie と私は、GoogleApp Engine で Python を使用する練習として、簡単なサインアップ ページを作成しています。

サインアップ フォームが正しく記入されていない場合、プログラムは正常に動作します。正しく入力すると、サンキュー ページにリダイレクトされるはずですが、代わりにサーバー エラーが発生します。

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]+@[\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)
4

1 に答える 1

5

Webapp2 は、ハンドラー メソッド (get/post)からの戻り値が callable であることを期待しています。これが行われる理由は、提供された応答オブジェクト (要求の環境を変更する self.response) を変更する代わりに、呼び出し可能な応答の形式で作業単位を構築するためです。フレームワークによってリクエストの環境に適用されます

return usernameフレームワークが呼び出し不可能な Unicode オブジェクト (ユーザー名) を呼び出そうとすると。

于 2012-07-31T17:44:42.843 に答える