2012-04-29 40 views
5

Tôi đang cố gắng để xây dựng một (newbie) ứng dụng với Google App Engine, nhưng khi tôi chạy nó Tôi tìm thấy điều này (bản ghi) lỗi mà tôi không hiểu:Tại sao mã này nhận được đối tượng 'str' này không có lỗi 'get_match_routes' thuộc tính?

File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1479, in __init__ 
    self.router = self.router_class(routes) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1129, in __init__ 
    self.add(route) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1142, in add 
    for r in route.get_match_routes(): 
AttributeError: 'str' object has no attribute 'get_match_routes' 
INFO  2012-04-29 14:42:34,056 dev_appserver.py:2891] "GET/HTTP/1.1" 500 - 

Toàn bộ mã dưới đây. Ai đó có thể tìm ra nguyên nhân của lỗi này và cách tôi có thể sửa lỗi đó? Cảm ơn bạn trước vì đã giúp đỡ!

import webapp2 

form = """ 

<html> 
<head> 
<title>Sign Up</title> 
<style type="text/css"> 
    .label {text-align: right} 
    .error {color: red} 
</style> 

    </head> 

    <body> 
    <h2>Signup</h2> 
<form method="post"> 
    <table> 
    <tr> 
     <td class="label"> 
     Username 
     </td> 
     <td> 
     <input type="text" name="username" value=""> 
     </td> 
     <td class="error"> 

     </td> 
    </tr> 

    <tr> 
     <td class="label"> 
     Password 
     </td> 
     <td> 
     <input type="password" name="password" value=""> 
     </td> 
     <td class="error"> 

     </td> 
    </tr> 

    <tr> 
     <td class="label"> 
     Verify Password 
     </td> 
     <td> 
     <input type="password" name="verify" value=""> 
     </td> 
     <td class="error"> 

     </td> 
    </tr> 

    <tr> 
     <td class="label"> 
     Email (optional) 
     </td> 
     <td> 
     <input type="text" name="email" value=""> 
     </td> 
     <td class="error"> 

     </td> 
    </tr> 
    </table> 

    <input type="submit"> 
</form> 
</body> 

</html> 
""" 

welcome = """ 
<html> 
    <head> 
    <title>Unit 2 Signup</title> 
    </head> 

    <body> 
    <h2>Welcome, %(username)s!</h2> 
    </body> 
</html> 
""" 
import re 

USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$") 
def valid_username(username): 
    return USER_RE.match(username) 

PASS_RE = re.compile(r"^.{3,20}$") 
def valid_password(password): 
    return PASS_RE.match(password) 

EMAIL_RE = re.compile(r"^[\S][email protected][\S]+\.[\S]+$") 
def valid_email(email): 
    return EMAIL_RE.match(email) 

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     self.response.out.write(form) 

    def write_form(self, text_write): 
     self.response.out.write(form) 

    def post(self): 
     user_name = self.request.get("username") 
     user_pass = self.request.get('password') 
     user_verify = self.request.get('verify') 

     err_username = "" 
     if not valid_username(user_name): 
      err_username = "Oh no!!! Username isn't valid!" 
     err_pass = "" 
     if not valid_pass(user_pass): 
      err_pass = "Oh no!!! password isn't valid!" 
     err_verify = "" 
     if user_pass != user_verify: 
      err_verify = "Oh no!!! password verification didn't check!" 

class WelcomeHandler(webapp2.RequestHandler): 
    def get(self): 
     self.response.out.write(welcome) 

app = webapp2.WSGIApplication([('/', MainHandler), '/welcome', WelcomeHandler], 
          debug=True) 
+0

Một nơi nào đó, bạn đang chuyển một chuỗi tới một đối tượng webapp2, nơi nó đang mong đợi một thứ khác, có lẽ là một kiểu dữ liệu phức tạp hơn. –

Trả lời

7

Fix định nghĩa các tuyến đường của bạn với:

app = webapp2.WSGIApplication([(r'/', MainHandler), 
           (r'/welcome', WelcomeHandler)], 
           debug=True) 

Kiểm tra cũng webapp2 routing extended cho một cái gì đó cao cấp hơn.

+1

Cảm ơn bạn rất nhiều! Nó rất rõ ràng, nhưng nó sẽ là khó khăn với tôi thấy rằng với msg lỗi đăng nhập! – craftApprentice

Các vấn đề liên quan