用 Python 2.7 编写的应用程序引擎应用程序在 app.yaml 中具有以下结构:
handlers:
- url: /_ah/push-handlers/.*
script: main.app
#login: admin
secure: always
- url: /_ah/start
script: start.app
- url: /_ah/stop
script: stop.app
start.py 和 stop.py 分别由 /-ah/start 和 /_ah/stop 处理,当 appengine 应用程序启动和停止以处理 pubsub 消息时,它们包含各自的方法。例如,start.py 包含以下代码:
app = webapp2.WSGIApplication([
('/_ah/start', ReceiveStart)
], debug=True)
这个类要处理包含默认的 get 方法:
class ReceiveStart(webapp2.RequestHandler):
def get(self):
last_end_time_str = ""
try:
# get the App Engine default bucket name to store a GCS file with last end_time
project_id = app_identity.get_application_id()
现在,如果将此应用程序转换为 Python 3.7(尚未测试),app.yaml 将变为:
handlers:
- url: /_ah/push-handlers/.*
script: auto
#login: admin
secure: always
- url: /_ah/start
script: auto
- url: /_ah/stop
script: auto
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
当向此应用程序引擎发送和接收消息时,是否会像 Python 2.7 中那样发生这种重定向? start.app 和 stop.app 的 url 是否正确,因为脚本设置为 auto,而不是 start.app 和 stop.app 会起作用吗?
借助第二代 AppEngine,网络服务器不再依赖于平台,您可以使用所需的库来运行所需的框架。
在Python中,API通常使用Flask。 Django 更多用于网络应用程序。
无论如何,现在,您的处理程序不会将请求路由到特定脚本,而是将请求路由到必须处理该请求的网络服务器。
/_ah/start
和/__ah/stop
的用法是相同的,但你必须在你的网络服务器中定义这些路由。这是烧瓶中的示例
from flask import Flask, request
app = Flask(__name__)
@app.route('/_ah/start')
def start():
print("start called")
return "",200
@app.route('/_ah/stop')
def stop():
print("stop called")
return "",200