My favorites | 中文(简体) | Sign in

开发网络服务器

App Engine SDK 包括一个用于开发和测试 App Engine 应用程序的网络服务器应用程序。该网络服务器可重现 App Engine Python 运行时环境(包括沙盒限制),并模拟 App Engine 服务(例如,数据库)。

SDK 和网络服务器可在任何装有 Python 2.5 的计算机上运行。您可以在 Python 网站上获取适用于您操作系统的 Python。

如果您尚未拥有 SDK,可以下载 App Engine SDK

运行开发网络服务器

当您获得应用程序的目录以及 app.yaml 配置文件后,即可通过 dev_appserver.py 命令启动开发网络服务器:

dev_appserver.py myapp

默认情况下,网络服务器在端口 8080 上进行监听。您可以在以下网址访问该应用程序:http://localhost:8080/

要更改网络服务器使用的端口,请使用 --port 选项:

dev_appserver.py --port=9999 myapp

要中断网络服务器:在 Windows 环境下,请在命令提示窗口中按 Control-Break 键。在 Mac OS X 或 Unix 环境下,请按 Control-C 键。

该网络服务器在运行时会监视您对文件所做的更改,如有需要,还会重新加载这些文件。对于大多数类型的更改,您只需编辑文件然后在浏览器中重新加载该网页。在某些情况下(例如,当应用程序进行动态导入时),您可能需要重新启动该网络服务器以重设模块导入缓存。

使用数据库

开发网络服务器可以使用您计算机上的一个文件模拟 App Engine 数据库。在网络服务器的调用之间,此文件仍然存在,因此当下一次运行该网络服务器时,您所存储的数据仍将可用。

要清除应用程序的本地数据库,请在启动该网络服务器时使用 --clear_datastore 选项:

dev_appserver.py --clear_datastore myapp

该网络服务器会在启动时将其正在使用的数据库文件的位置打印到终端。您可以创建该文件的副本,稍后对其进行还原以将该数据库重设为已知状态。请确保在替换数据库文件后重新启动网络服务器。

要更改数据库文件使用的位置,请使用 --datastore_path 选项:

dev_appserver.py --datastore_path=/tmp/myapp_datastore myapp

当您的应用程序在数据库上执行查询时,开发网络服务器会检查应用程序的 index.yaml 文件是否支持该查询。如果该查询要求在文件中提及其索引,那么服务器将生成一个索引并将该索引添加到此文件中。如果您的应用程序可以尝试执行未进行测试的查询,那么您可能想要编辑此文件。

自创建或上次清除数据库文件以来所执行的每个查询都会生成 index.yaml。查询历史记录会存储在单独的文件中。要更改历史记录文件的位置,请以类似于使用 --datastore_path 选项的方式使用 --history_path 选项。

有关索引和 index.yaml 的详细信息,请参阅查询和索引以及配置索引

使用 User

开发网络服务器可以使用自己的登录和退出页面模拟 Google 帐户。在开发网络服务器下运行时,users.create_login_urlusers.create_logout_url 函数将返回本地服务器上的 /_ah/login/_ah/logout 的网址。

开发登录页面包含一个表单,您可以在该表单中输入一个电子邮件地址。不管您输入了什么电子邮件地址,您的会话都会将其作为有效用户使用。

要使应用程序认定登录的用户为管理员,请选中 复选框(位于表单上)。

使用邮件

开发网络服务器可发送电子邮件以调用 App Engine 邮件服务。要启用电子邮件支持,必须为网络服务器提供用于指定要使用的邮件服务器的选项。网络服务器可以使用 SMTP 服务器,也可以使用本地安装的 Sendmail

要启用使用 SMTP 服务器的邮件支持,请使用具有相应值的 --smtp_host--smtp_port--smtp_user--smtp_password 选项。

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns myapp

要启用使用 Sendmail 的邮件支持,请使用 --enable_sendmail 选项。网络服务器将使用 sendmail 命令,根据您安装时的默认配置发送电子邮件。

dev_appserver.py --enable_sendmail myapp

如果未启用使用 SMTP 或 Sendmail 的邮件,那么,尝试从应用程序发送电子邮件的操作将无效,但是在应用程序中则会显示为发送成功。

使用网址抓取

当您的应用程序使用网址抓取 API 创建 HTTP 请求时,开发网络服务器将直接从您的计算机创建该请求。如果您使用代理服务器访问网站,那么,这种行为可能与在 App Engine 上运行应用程序时不同。

注意:dev_appserver.py 一次只能处理一个请求。如果您的应用程序在处理请求的同时对自身创建了网址抓取请求,那么在使用开发网络服务器时,这些请求将会失败。(如果是在 App Engine 上运行,那么请求将不会失败。)要测试这些请求,您可以在其他端口上运行 dev_appserver.py 的另一实例,然后对您的应用程序进行编码以在对其自身创建请求时使用其他服务器。

开发控制台

开发网络服务器包括一个控制台网络应用程序。通过该控制台,您可以浏览本地数据库,并可通过将 Python 代码提交到网络表单与该应用程序进行交互。

要访问控制台,请访问您服务器上的网址 /_ah/adminhttp://localhost:8080/_ah/admin

命令行参数

dev_appserver.py 命令支持以下命令行参数:

--datastore_path=...

用于本地数据库数据文件的路径。如果文件不存在,服务器将创建该文件。

--history_path=...

用于本地数据库历史记录文件的路径。

--debug

运行时将详细的调试消息打印到该控制台。

--help

打印有用的消息,然后退出。

--login_url=...

用于用户登录页面的相关网址。默认为 /_ah/login

--port=...

用于该服务器的端口号。默认为 8080

--address=...

用于该服务器的主机地址。您可能需要设置该地址,以便能够从网络上的其他计算机访问该开发服务器。地址 0.0.0.0 允许进行本地主机访问和主机名访问。默认为 localhost

--clear_datastore

启动该网络服务器之前清除数据库。

--require_indexes

禁用在 index.yaml 文件中自动生成条目。当应用程序创建的查询要求在该文件中定义其索引,而未找到索引定义时,会抛出异常,这与在 App Engine 上运行时发生的情况类似。

--smtp_host=...

用于发送电子邮件的 SMTP 服务器主机名。

--smtp_port=...

用于发送电子邮件的 SMTP 服务器端口号。

--smtp_user=...

用于发送电子邮件的用户名(与 SMTP 服务器一同使用)。

--smtp_password=...

用于发送电子邮件的密码(与 SMTP 服务器一同使用)。

--enable_sendmail

使用本地计算机上安装的 Sendmail 发送电子邮件。

--debug_imports

打印与导入模块相关的调试消息(包含搜索路径和错误)。