首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有目录路由的简单服务器

带有目录路由的简单服务器
EN

Stack Overflow用户
提问于 2014-08-19 05:49:06
回答 2查看 117关注 0票数 0

我对应用引擎和python非常陌生。我已经完成了教程,但还没有找到一个简单/优雅的解决方案来满足我的需要。

我想创建一个有多个目录的网站:

代码语言:javascript
复制
/home
   /index.html
/stuff
   /index.html
/otherstuff
   /index.html

我知道我可以很容易地做到这一点,如果在我的app.yaml文件中我这样做:

代码语言:javascript
复制
- url: /otherstuff
    script: account/otherstuff.py

- url: /stuff
    script: game/stuff.py

- url: .*
    script: home.py

我的问题是,这不是一个优雅的解决方案,因为我将有3个python文件来提供简单的html文件。相反,我只希望有一个python文件将get请求路由到适当的目录。因为我是一个应用程序引擎和python的新手-我希望有人愿意为如何做到这一点提供一些线索。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 12:12:31

如果html文件是静态文件,则不需要通过Python提供它们。(正如Paul Collingwood指出的那样)

但是,如果您坚持使用Python作为学习因素,或者您的html文件是动态的。这是一个建议。

在app.yaml文件中,您可以声明:

代码语言:javascript
复制
handlers:
- { script: main.app, url: /.* }

其中main是您的python文件名,app是python文件中的变量名。

创建一个包含内容的main.py文件:

代码语言:javascript
复制
import webapp2

class HomeHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("<h1>Hello</h1>")
        return

class StuffHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("<h1>Stuff</h1>")
        return

app = webapp2.WSGIApplication(
    [
        ('/', HomeHandler),
        ('/stuff/', StuffHandler)
    ],
    debug=True
)

这应该能给你一个主意。

您应该通过模板为html页面提供服务,以便将html与python代码分开。您可以使用jinja2库来做到这一点。

简单html jinja2模板签出的示例:http://www.stefanolocati.it/blog/?p=1338

希望这能帮上忙。干杯。

更新:

如果您希望它动态地捕获名称,您可以这样做:

代码语言:javascript
复制
class DynamicHandler(webapp2.RequestHandler):
    def get(self, stuff):
        self.response.write('This is the DynamicHandler. '
           'The string is %s' % stuff)

app = webapp2.WSGIApplication(
    [
      (r'/', HomeHandler),
      (r'/(.*)', DynamicHandler)
    ],
    debug=True
)

这将使您了解如何处理目录名。

关于处理404,通常可以在末尾添加这一行。(在app=webapp2之后)

代码语言:javascript
复制
def handle_404(request, response, exception):
    response.write('This is not the droid you are looking for')
    response.set_status(404)

app.error_handlers[404] = handle_404

但是,由于我们的regex非常广泛,所以您必须处理DynamicHandler中的所有内容(例如,如果有人输入了/droid如果要满足正则表达式),您必须在DynamicHandler中引发您自己的异常。

有关webapp2异常处理,请参阅此页面

https://webapp-improved.appspot.com/guide/exceptions.html

作为一个建议,我不会像上面的例子那样去做广泛的/动态的事情,但是希望这能帮助你做你想做的事情。

干杯。

票数 0
EN

Stack Overflow用户

发布于 2016-04-05 14:01:17

烧瓶-平底袋或多或少地做了你想做的事情,但实际上,你没有理由在App上托管一个静态站点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25376461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档