2013-10-11 127 views
1

我想构建一个简单的GAE应用程序,并希望将不同的部分存储在不同的python文件中。例如,我想一个URI,如:GAE请求处理程序路径

XXX/appspot.com /书/电子书/ 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消息。谁能帮忙?

回答

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) 

编辑:如果你希望你的网址是/书/电子书/ 42(就像你在你的问题说的),只是处理器定义更改为:

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

祝你的书店! :)

0

我会从你的处理程序分开你的路线开始。首先创建一个“routes.py”文件,并在你的应用程序中添加路由。

from webapp2 import Route 

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

请注意,我在这里做的更改是,books.py文件现在包含在“handlers”模块中。该模块内的 “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文件的正确配置:

main.py:

import webapp2 
from routes import ROUTES 

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

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: .* 
    script: main.app 

libraries: 
- name: webapp2 
    version: "2.5.2"