我正在创建一个小项目,我在名为blog.py
的文件夹中有一个名为users.py
的主文件和一个名为source
的单独文件。
到目前为止,该项目的布局是:
MainFolder
|_blog.py
|
|_source
|_user.py
所以,我的user.py
非常简单,并且有一个@staticmethod
:
from google.appengine.ext import db
class User(db.Model):
username = db.StringProperty(required = True)
pwd_hash = db.StringProperty(required = True)
email = db.StringProperty()
@staticmethod
def searchByUsername(anUserName):
usersList = db.GqlQuery("select * from User where username='" + anUserName + "'")
user = None
for theUser in usersList:
user = theUser
return user
在我的blog.py
文件中,我尝试通过制作User.searchByUsername(anUserName)
来调用该方法,但是当我这样做时,每个人都会爆炸并且我最终会出错(检查最后2行):
Traceback (most recent call last):
File "/home/pedro/google_appengine/google/appengine/runtime/wsgi.py", line 266, in Handle
result = handler(dict(self._environ), self._StartResponse)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__
response = self._internal_error(e)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
rv = self.handle_exception(request, response, e)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
return handler.dispatch()
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/pedro/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "/home/pedro/google_appengine/hw5/blog.py", line 202, in post
user = User.searchByUsername(username)
NameError: global name 'User' is not defined
我在from source import user
文件中使用blog.py
,并且sources文件夹中还有__init__.py
空白文件夹,因此我知道该文件已正确导入。
此外,如果我只是将user.py
文件的内容复制/粘贴到blog.py
文件中,一切正常(但我的代码变大了,没有组织)。我该如何解决这个问题?
答案 0 :(得分:4)
通过执行from source import user
,您要导入模块 user
,而不是其中的User
类。如果要导入该类,则应执行from source.user import User
。或者您可以执行from source import user
,然后将该类称为user.User
。
静态方法与它无关。正如错误消息所示,问题在于它不知道User
是什么,因此它甚至无法开始调用该类的方法。
答案 1 :(得分:1)
听起来您可能忘记将用户导入blog.py:
from source.user import User