正在加载...

Google App Engine 入门: Hello World

四月 30th, 2008

(本文译自:Google App Engine Getting Started)

Google App Engine 应用通过 CGI 标准协议与服务器通讯.这是一个标准的Http处理流程,Web服务接受到客户端发来的Get或Post请求,web服务器把请求转发给你的应用程序,由应用程序来处理要输出的内容。

为了更好的理解这个过程,下面就开始开发我们经典的Hellow World应用程序吧。在这一章,仅仅只是实现显示一些简单的信息的功能。

创建一个简单的 Request Handler

首先创建一个名为 helloworld 的文件夹。 除非特殊说明,以后所有关于这个应用程序的文件都将放在这个文件夹里面。

helloworld 文件夹里, 创建一个新文件 helloworld.py,文件内容如下:

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'

这个Python 脚本处理一个request请求,并且设置一个Http header,输出一个空行和一段信息 Hello, world!.

创建配置文件

每个App Engine application 都包含一个名为 app.yaml的配置文件。 在这个配置文件中,可以设置具体的某个URL需要用哪个Python脚本来处理.

现在,在 helloworld 文件夹中,创建一个新的 app.yaml 文件,输入以下内容:

application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: helloworld.py

这个配置文件描述了以下内容::

  • 这个应用程序的标识是 helloworld. 这个标识需要和你在App Engine网站上创建的应用程序标识保持一致。在开发期间你可以使用任何你喜欢的名字,但是上传的时候,必须要和你在App Engine 注册的标识保持一致。现在,我们把它设置为 helloworld.
  • 你的应用程序的版本号为1 ,如果你在上传应用之前修改了这个编号, App Engine 将会自动保留前一个版本的副本,以方便你可以在管理平台中将当前版本恢复成原来的版本。
  • 该应用运行在 python 环境, 环境版本是 1. 目前只有Python可选,将来会提供更多的运行环境和开发语言.
  • 所有符合正则表达式/.* (所有URL) 的请求,都由 helloworld.py 脚本来处理.

该配置文件使用 YAML语法. 关于该配置文件的更多选项, 请参考 the app.yaml reference.

测试应用程序

现在这个应用程序已经基本上完整了。 你可以在本地App Engine SDK环境中进行模拟运行测试。

首先,指定应用路径为 helloworld 目录,使用下面的命令启动测试环境Web服务程序,:

google_appengine/dev_appserver.py helloworld/

这个Web服务程序将监听8080端口. 你可以在浏览器中输入以下地址进行测试:

关于这个web服务程序的更多选项(如怎样修改默认端口等), 请查看the Dev Web Server reference, 或者使用命令行选项 --help.

无需中断你的开发

在开发过程中,你不需要不停的重启Web服务程序。Web服务程序可以自行判断哪些脚本文件已经被修改过了,并且重新加载这些脚本。

试一试: 不要关闭web服务程序, 编辑 helloworld.pyHello, world! 修改成其他内容. 重新访问http://localhost:8080/ ,看看是不是您的修改已经生效了!

要关闭Web服务程序,您只需在控制台中按下 Control-C (或其他有效的 "break" 功能键).

PS:在以后的入门指导中,你可以让你的Web服务程序一直开着 。

接下来...

我们已经开发了一个完整的web应用程序!你可能迫不及待的就想把这个程序发布出去,并分享给你的朋友了。且慢,还是让我们给它增加一些功能后再这样做吧,毕竟它太简陋了。

下一章: 使用 Webapp Framework.

相关阅读:



“Google App Engine 入门: Hello World” 共有52条留言

  1. Gooele App Engine 入门:开发环境 | 徐明的博客 On

    [...] 下一章: Hello, World! [...]

  2. kevin On

    “google_appengine/dev_appserver.py helloworld/” 这句到底怎么样才能运行呢

  3. LT On

    dev_appserver.py的运行首先要安装python 2.5,在命令窗口下输入“google_appengine/dev_appserver.py helloworld/”就可以了,如果没有运行,应该是windows没有把python安装目录加为环境变量。比如python安装目录是“D:\python25”,你可以在windows中手工添加环境变量,也可以用“D:\python25 google_appengine/dev_appserver.py helloworld/”来运行。

  4. LT On

    代码漏了,立即改正: D:\python25、python google_appengine/dev_appserver.py helloworld/

  5. LT On

    越改越乱,呵呵。 D:/python25/python google_appengine/dev_appserver.py helloworld/

  6. simon hsu On

    是的,前提是要保证Python2.5已经正确安装,并且已经把Python.exe的路径加入到windows环境变量之中。

  7. 学习 On

    我的出这个错误。。搞不懂了 D:\Program Files\Google\google_appengine>dev_appserver.py hello/ ERROR 2008-06-03 13:19:28,454 dev_appserver_main.py] Fatal error when loading application configuration:

  8. simon hsu On

    app.yaml文件有误, 你也可以看看,是否是配置了静态文件夹的原因 http://xuming.net/2008/05/gae-static_dir.html

  9. wang On

    我出了这个错误: file"",line google_appengine/dev_appserver.py helloworld/ 怎么回事?

  10. wang On

    还有,您说创建helloworld 文件夹,在那个目录下创建?还是在那个目录下创建都可以?

  11. simon hsu On

    文件夹在哪里创建都没有关系,如果使用dev_appserver.py helloworld/ 这种形式的话,应该当前是在helloworld的上一级目录,并且要保证dev_appserver.py能够正确执行

  12. wang On

    我错误提示如下,请指教。 D:\program files\Google\google_appengine>dev_appserver.py helloworld ERROR 2008-06-06 14:46:13,844 dev_appserver_main.py] Fatal error when loading application configuration: Invalid object: Unknown url handler type. in "helloworld\app.yaml", line 7, column 1

  13. simon hsu On

    yaml文件配置有误,这是一个格式非常严格的文件,"aaa: bbb" 中间必须要有一个空格,你看看是否是这个问题

  14. 山猫 On

    对了, 好像你这儿的代码, 英文引号都被换成了中文引号, 新手照抄的话肯定不知道怎么出错的。 改一改吧

  15. issin On

    Unknown url handler type. in "helloworld\app.yaml", line 7, column 1 这个问题是因为少了两个空格,把 handlers: - url: /.* script: helloworld.py 改为 handlers: - url: /.* script: helloworld.py 就可以了

  16. Richard On

    运行 google_appengine/dev_appserver.py helloworld/ 出现如下信息到底对不对啊?为什么我的http://localhost:8080/ 访问不了? C:\Documents and Settings\Administrator>dev_appserver.py helloworld/ Traceback (most recent call last): File "D:\Program Files\Google\google_appengine\dev_appserver.py", line 55, in execfile(script_path, globals()) File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps erver_main.py", line 358, in sys.exit(main(sys.argv)) File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps erver_main.py", line 306, in main config, matcher = dev_appserver.LoadAppConfig(root_path, {}) File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps erver.py", line 2636, in LoadAppConfig raise AppConfigNotFoundError google.appengine.tools.dev_appserver.AppConfigNotFoundError C:\Documents and Settings\Administrator>

  17. admin On

    请在helloword同级目录执行上述命令,需要保证后面的路径是正确的

  18. Richard On

    非常感谢admin的回答。就是您说的原因。

  19. 小人物 On

    yaml配置文件最后一行script前面空二格就可以了,祝大家好运

  20. craftsman On

    C:\>appcfg.py update helloworld/
    C:\Program Files\Google\google_appengine\appcfg.py:40: DeprecationWarning: the s
    ha module is deprecated; use the hashlib module instead
    EXTRA_PATHS = [
    Loaded authentication cookies from C:\Documents and Settings\Administrator/.appc
    fg_cookies
    Scanning files on local disk.
    Initiating update.
    2008-11-01 10:31:56,592 ERROR appcfg.py:1128 An unexpected error occurred. Abort
    ing.
    Error 403: --- begin server output ---
    You do not have permission to modify this app (app_id=u'helloworld').
    --- end server output ---

    我的本地已经运行OK了,但是上传到google的时候出现这个问题,不知道怎么回事。

  21. 徐明 On

    你没有权限上传文件,请修改app.yaml中的应用名

  22. woog(china) On

    TO:craftsman
    你用得python版本可能是2.6版的。但是现在的appengine支持的版本为2.5版的。
    所以改用python2.5就可以了。

  23. justin On

    C:\Program Files\Google\google_appengine>dev_appserver.py helloworld/
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 55, in

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver_main.py", line 358, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver_main.py", line 306, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 2681, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

    请问徐老师,以上问题怎么解决?
    C:\Program Files\Google\google_appengine>

  24. 徐明 On

    你可以在helloworld目录下 执行"dev_appserver.py ." 试试

  25. sky On

    我修改你的micolog,在通过tag显示文章列表时候没有用时间排序。

    所以我想自己就该,就是加一个 .order("-date") 但是不知道为什么,加上就出错误。而且又不提示什么错误,就说的什么 server error ......

  26. 徐明 On

    我试过,没有出现错误,下一版本吧这个加上

  27. justin On

    徐明 On 2008-11-27 at 09:51
    你可以在helloworld目录下 执行"dev_appserver.py ." 试试
    =====================================
    我尝试了,但是用浏览器一打开 http://localhost:8080/ 之后还是没反应。显示:Internet Explorer 无法显示该页面

  28. 徐明 On

    打开 http://localhost:8080/没反应?
    您需要查看dev_appserver执行环境里是否已经执行到Running application xxx on port 8080: http://localhost:8080

  29. justin On

    显示一下错误信息:
    烦死了。
    D:\google_appengine>dev_appserver.py helloworld/
    ERROR 2008-11-29 08:08:04,983 dev_appserver_main.py] Fatal error when loading
    application configuration:
    Invalid object:
    Unknown url handler type.
    <URLMap
    static_dir=None
    secure=never
    script=None
    url=/.*
    static_files=None
    upload=None
    expiration=None
    login=optional
    mime_type=None
    >
    in "helloworld/app.yaml", line 8, column 1

    D:\google_appengine>google_appengine/dev_appserver.py helloworld/
    'google_appengine' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

    D:\google_appengine\helloworld>dev_appserver.py
    Invalid arguments
    Runs a development application server for an application.

    dev_appserver.py [options]

    Application root must be the path to the application to run in this server.
    Must contain a valid app.yaml or app.yml file.

    Options:
    --help, -h View this helpful message.
    --debug, -d Use debug logging. (Default false)
    --clear_datastore, -c Clear the Datastore on startup. (Default false)
    --address=ADDRESS, -a ADDRESS
    Address to which this server should bind. (Default
    localhost).
    --port=PORT, -p PORT Port for the server to run on. (Default 8080)
    --datastore_path=PATH Path to use for storing Datastore file stub data.
    (Default c:\docume~1\justin\locals~1\temp\dev_appse
    rver.datastore)
    --history_path=PATH Path to use for storing Datastore history.
    (Default c:\docume~1\justin\locals~1\temp\dev_appse
    rver.datastore.history)
    --require_indexes Disallows queries that require composite indexes
    not defined in index.yaml.
    --smtp_host=HOSTNAME SMTP host to send test mail to. Leaving this
    unset will disable SMTP mail sending.
    (Default '')
    --smtp_port=PORT SMTP port to send test mail to.
    (Default 25)
    --smtp_user=USER SMTP user to connect as. Stub will only attempt
    to login if this field is non-empty.
    (Default '').
    --smtp_password=PASSWORD Password for SMTP server.
    (Default '')
    --enable_sendmail Enable sendmail when SMTP not configured.
    (Default false)
    --show_mail_body Log the body of emails in mail stub.
    (Default false)
    --auth_domain Authorization domain that this app runs in.
    (Default gmail.com)
    --debug_imports Enables debug logging for module imports, showing
    search paths used for finding modules and any
    errors encountered during the import process.
    --disable_static_caching Never allow the browser to cache static files.
    (Default enable if expiration set in app.yaml)

    D:\google_appengine\helloworld>dev_appserver.py helloworld/
    Traceback (most recent call last):
    File "d:\google_appengine\dev_appserver.py", line 55, in
    execfile(script_path, globals())
    File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
    358, in
    sys.exit(main(sys.argv))
    File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
    306, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "d:\google_appengine\google\appengine\tools\dev_appserver.py", line 2681,
    in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  30. 徐明 On

    dev_appserver.py helloworld/ 这个命令是对的,只不过你的app.yaml文件错误了

  31. buaabyy On

    它本身的app.yaml文件格式是有问题的,最后那行的script之前要加两个空格,另外,py源文件的中文引号也应该改为英文状态的。这样改过之后就可以了。

  32. caichengpei On

    晕死,调了半表还是:
    C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 351, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 300, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 2450, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  33. caichengpei On

    晕死,调了半表还是:
    C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 351, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 300, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 2450, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  34. caichengpei On

    晕死,调了半表还是:
    C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 351, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 300, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 2450, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  35. caichengpei On

    晕死,调了半表还是:
    “C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 351, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
    erver_main.py", line 300, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 2450, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError”

  36. caichengpei On

    晕死,调了半表还是:

    D:\google_appengine\helloworld>dev_appserver.py helloworld/
    Traceback (most recent call last):
    File "d:\google_appengine\dev_appserver.py", line 55, in
    execfile(script_path, globals())
    File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
    358, in
    sys.exit(main(sys.argv))
    File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
    306, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path, {})
    File "d:\google_appengine\google\appengine\tools\dev_appserver.py", line 2681,
    in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  37. caichengpei On

    晕死,调了半表还是跟justin一样出错

  38. caichengpei On

    呀!!!!!!!
    不好意思呀,不是来捣乱的,用chrom,提示出错,刷新一下却提交了那么多次,不好意思呀!

  39. justin On

    新手一定要注意最后一行script前加两个空格

  40. weyony On

    d:\Program Files\Google\google_appengine>dev_appserver site/
    INFO 2009-01-23 16:51:45,334 appcfg.py] Server: appengine.google.com
    INFO 2009-01-23 16:51:45,345 appcfg.py] Checking for updates to the SDK.
    WARNING 2009-01-23 16:51:45,940 datastore_file_stub.py] Could not read datastor
    e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore
    WARNING 2009-01-23 16:51:45,944 datastore_file_stub.py] Could not read datastor
    e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore.history
    WARNING 2009-01-23 16:51:45,956 dev_appserver.py] Could not initialize images A
    PI; you are likely missing the Python "PIL" module. ImportError: No module named
    PIL
    INFO 2009-01-23 16:51:45,969 dev_appserver_main.py] Running application fant
    seer on port 8080: http://localhost:8080

    http://localhost:8080在浏览器里无法显示页面啊

    还有“datastore_file_stub.py] Could not read datastor
    e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore”
    这是什么问题啊

  41. 徐明 On

    只是warning应该没问题的,检查一下自己的代码吧

  42. Sean On

    哇塞 终于输出helloworld了 两个空格 这下记住了 !

  43. knifor On

    我的报错如下:
    File "",line 1
    google_appengine>dev_appserver.py helloworld/(字母d下面有一个尖尖)

    请问怎么改这个错误啊?

  44. fuowen20 On

    E:\Google\helloworld>dev_appserver.py .
    INFO 2009-02-19 07:59:28,619 appengine_rpc.py] Server: appengine.google.com
    INFO 2009-02-19 07:59:28,619 appcfg.py] Checking for updates to the SDK.
    INFO 2009-02-19 07:59:28,901 appcfg.py] The SDK is up to date.
    WARNING 2009-02-19 07:59:28,901 datastore_file_stub.py] Could not read datastor
    e data from c:\docume~1\fuhao\locals~1\temp\dev_appserver.datastore
    WARNING 2009-02-19 07:59:28,901 datastore_file_stub.py] Could not read datastor
    e data from c:\docume~1\fuhao\locals~1\temp\dev_appserver.datastore.history
    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 60, in

    run_file(__file__, globals())
    File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 57, in
    run_file
    execfile(script_path, globals_)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver_main.py", line 463, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver_main.py", line 442, in main
    static_caching=static_caching)
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
    erver.py", line 3168, in CreateServer
    return BaseHTTPServer.HTTPServer((serve_address, port), handler_class)
    File "C:\Python25\lib\SocketServer.py", line 330, in __init__
    self.server_bind()
    File "C:\Python25\lib\BaseHTTPServer.py", line 101, in server_bind
    SocketServer.TCPServer.server_bind(self)
    File "C:\Python25\lib\SocketServer.py", line 341, in server_bind
    self.socket.bind(self.server_address)
    File "", line 1, in bind
    socket.error: (10013, 'Permission denied')

    E:\Google\helloworld>

    报了一个权限错误,不知道咋回事,在此来请教了。

  45. 小虎 On

    非常感谢啊!我是看着你翻译的教程一步步入门的,我现在会一些简单设置并且上传程序了,我刚刚还绑定了域名,也绑定成功了,可是却自动给我添加了www,不加www就不能访问,而不是像你这样的裸体域名。请问是怎么做的?谢谢,等待回复……

  46. bansi On

    徐大大可是以前HOT-BBS站长?

    001over

  47. Toad On

    ./appcfg.py:40: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
    DIR_PATH,
    Error parsing yaml file:
    Unexpected attribute 'pplication' for object of type .
    in "test/app.yaml", line 1, column 13

  48. Toad On

    [root@localhost google_appengine]# ./appcfg.py update test/
    ./appcfg.py:40: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
    DIR_PATH,
    Traceback (most recent call last):
    File "./appcfg.py", line 55, in
    execfile(script_path, globals())
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 1943, in
    main(sys.argv)
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 1936, in main
    AppCfgApp(argv).Run()
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 1521, in Run
    self.action.function(self)
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 1726, in Update
    rpc_server = self._GetRpcServer()
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 1649, in _GetRpcServer
    save_cookies=self.options.save_cookies)
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 125, in __init__
    self.opener = self._GetOpener()
    File "/tmp/google_appengine/google/appengine/tools/appcfg.py", line 337, in _GetOpener
    opener.add_handler(urllib2.HTTPSHandler())
    AttributeError: 'module' object has no attribute 'HTTPSHandler'

  49. a On

    你好,我的不报任何错误,可是运行浏览器之后没有任何结果,直接找不到服务器
    这是怎么回事呀?

  50. a On

    Traceback (most recent call last):
    File "C:\Program Files\Google\google_appengine\dev_appserv

    execfile(script_path, globals())
    File "C:\Program Files\Google\google_appengine\google\appe
    erver_main.py", line 358, in
    sys.exit(main(sys.argv))
    File "C:\Program Files\Google\google_appengine\google\appe
    erver_main.py", line 306, in main
    config, matcher = dev_appserver.LoadAppConfig(root_path,
    File "C:\Program Files\Google\google_appengine\google\appe
    erver.py", line 2638, in LoadAppConfig
    raise AppConfigNotFoundError
    google.appengine.tools.dev_appserver.AppConfigNotFoundError

  51. 忘川 On

    appcfg.py:40: DeprecationWarning: the sha module is d
    eprecated; use the hashlib module instead
    Could not guess mimetype for images/favicon.ico. Using application/octet-stream
    上传不成功怎么回事呢

  52. pp On

    help!

    c:\Program Files\Google\google_appengine\micolog>dev_appserver.py ..\micolog
    ...
    WARNING ...datestore_file_stub.py] Could not read datastore data from
    c:\docume~1\admin~1locals~1\temp\dev_appserver.datastore
    WARNING ........................\dev_appserver.datastore.history
    INFO dev_appserver_main.py] Running application powerpirates on port 8080:
    http://localhost:8080

    thanks!

我要留言

麻烦,计算一下:7+2