1

我正在尝试构建一个简单的 GAE 应用程序,并希望将不同的部分存储在不同的 python 文件中。例如,我想要一个 URI,如:

xxx/appspot.com/books/book/42

我的 app.yaml

application: bookshop
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /books/*
  script: books.app

- url: .*
  script: main.application

libraries:
- name: webapp2
  version: "2.5.2"

我的 books.py 文件:

import webapp2

class BookHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('BookHandler')

app = webapp2.WSGIApplication([
    ('/.*/book', BookHandler)
], debug=True)

当我尝试 URI 时,我得到一个空白屏幕而不是消息 BookHandler。任何人都可以帮忙吗?

4

2 回答 2

0

我将首先将您的路线与您的处理程序分开。首先创建一个“routes.py”文件并在其中为您的应用程序添加路由。

from webapp2 import Route

ROUTES = [
    Route('/books/book/<book_id:\d+>', handler='handlers.books.BooksHandler')
]

请注意,我在这里所做的更改是,books.py 文件现在包含在“处理程序”模块中。此模块中的“books.py”文件可能如下所示:

import webapp2


class BooksHandler(webapp2.RequestHandler):

    def get(self, book_id):
        self.response.write('This is the Book Handler %s' % book_id)

最后一步是正确配置 webapp2 wsgi 应用程序和 yaml 文件:

主要.py:

import webapp2
from routes import ROUTES

app = webapp2.WSGIApplication(ROUTES, debug=True)

应用程序.yaml:

application: bookshop
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"
于 2013-10-11T20:11:55.990 回答
0

这是你的 app.yaml 应该是什么(注意书籍/。*而不是书/* )...另外,我认为它一定是一个错字,但它必须是main.app而不是 main.application:

application: bookshop
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /books/.*
  script: books.app

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"

这是您的 books.py 的外观(我假设您想使用部分 url 作为参数?):

import webapp2

class BookHandler(webapp2.RequestHandler):
    def get(self, bookid):
        self.response.write('BookHandler' + bookid)

app = webapp2.WSGIApplication([
                               ('/books/(.*)/book', BookHandler)
                               ], debug=True)

编辑:如果您希望您的 URL 为 /books/book/42 (就像您在问题中所说的那样),只需将处理程序定义更改为:

app = webapp2.WSGIApplication([
                                   ('/books/book/(.*)', BookHandler)
                                   ], debug=True)

祝你书店好运!:)

于 2013-10-11T20:07:04.887 回答