我正在使用项目ap pengine-rest-server来为所有现有模型创建REST Web服务。我收到一个奇怪的错误,第一次查询浏览器:http://localhost:8080/rest/metadata/user,它给了我结果:
<xs:schema>
−
<xs:element name="user">
−
<xs:complexType>
−
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="key" type="xs:normalizedString"/>
<xs:element maxOccurs="1" minOccurs="0" name="surname" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="0" name="firstname" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="0" name="ages" type="xs:long"/>
<xs:element maxOccurs="1" minOccurs="0" name="sex" type="xs:boolean"/>
<xs:element maxOccurs="1" minOccurs="0" name="updatedDate" type="xs:dateTime"/>
<xs:element maxOccurs="1" minOccurs="0" name="createdDate" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是刷新页面会给我这个错误:
Traceback (most recent call last):
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3185, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3128, in _Dispatch
base_env_dict=env_dict)
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 515, in Dispatch
base_env_dict=base_env_dict)
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2387, in Dispatch
self._module_dict)
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2297, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2195, in ExecuteOrImportScript
script_module.main()
File "/Users/foo/Documents/AppEngine/helloworld/main.py", line 48, in main
rest.Dispatcher.add_models({"user": UserModel})
File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 845, in add_models
cls.add_model(model_name, model_type)
File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 863, in add_model
raise KeyError("name %s already used" % model_name)
KeyError: 'name user already used'
有人可以解释为什么会这样吗?重新启动服务器,再次在浏览器上运行我得到xml结果,但刷新导致错误。它是appengine-rest-server应用程序中的错误还是在我的代码中?我的helloworld应用程序可供下载here。
答案 0 :(得分:3)
由于您具有main()
功能,App Engine会缓存您的模块并导入。因此,在同一运行时内,您可以多次调用add_models()
。如果将rest
初始化代码移动到模块级别(或者在模块初始化期间调用一次的函数,而不是在每次调用main()
期间),它应该可以工作。