Python 如何从falcon应用程序服务静态网页?

Python 如何从falcon应用程序服务静态网页?,python,falconframework,Python,Falconframework,我不熟悉python,因此也不熟悉falcon。我开始开发一个RESTful API,falcon到目前为止非常适合它。服务静态网页还有一些其他要求,我不想为此编写应用程序或生成服务器 falcon应用程序是否可以为静态网页提供服务 首先也是最重要的一点,我必须说你不想那样做。您应该在Falcon应用程序的顶部安装一个nginx服务器,直接从nginx提供任何静态文件(并将API调用重定向到Falcon) 也就是说,您可以轻松地从Falcon提供静态文件。这是您要查找的代码: import fa

我不熟悉python,因此也不熟悉falcon。我开始开发一个RESTful API,falcon到目前为止非常适合它。服务静态网页还有一些其他要求,我不想为此编写应用程序或生成服务器


falcon应用程序是否可以为静态网页提供服务

首先也是最重要的一点,我必须说你不想那样做。您应该在Falcon应用程序的顶部安装一个nginx服务器,直接从nginx提供任何静态文件(并将API调用重定向到Falcon)

也就是说,您可以轻松地从Falcon提供静态文件。这是您要查找的代码:

import falcon


class StaticResource(object):
    def on_get(self, req, resp):
        resp.status = falcon.HTTP_200
        resp.content_type = 'text/html'
        with open('index.html', 'r') as f:
            resp.body = f.read()

app = falcon.API()
app.add_route('/', StaticResource())

您可能希望将文件名设置为url中的一个参数,并将其放入资源中,这样静态资源就可以为目录中任何请求的文件提供服务。

您可以更好地控制到静态文件的路由,如下所示:

导入猎鹰
类静态资源(对象):
获取时的定义(self、req、resp、文件名):
#对文件名进行一些完整性检查
resp.status=falcon.HTTP_200
resp.content_type='适当/内容类型'
将open(filename,'r')作为f:
resp.body=f.read()
app=falcon.API()
app.add_路由('/static/{filename}',StaticResource())
你试过了吗

是一个静态文件服务中间件,已经封装好与Falcon一起使用。

您应该使用:

api.add_static_route('/foo', foo_path)
api.add_static_route('/foo/bar', foobar_path)

不熟悉Falcon,但根据Github的问题,它似乎不受支持:即使Falcon中没有明确的机制,也没有任何东西阻止您定义一个路由,比如说
/static
,它映射到某个目录,读取路径上的文件并在响应中返回。falcon文档中显示如何从文件系统读取和写入图像的示例:。但这不是最佳实践——使用托管Web服务器提供静态内容。我喜欢直接从服务器提供服务的想法。感谢您的回答。根据静态内容的大小,您可能需要设置
resp.stream=open('index.html','rb')
,以便Falcon将文件数据从磁盘流式传输,而不是首先将其全部读取到内存中。请记住使用
和open(filename,'rb')作为f:
(二进制读取模式),而不是
和open一起使用(filename,'r')作为f:
发布二进制文件,如jpg、zip等。从falcon 1.4开始,您可以使用
add_static_route
]]。请注意,本例中的'/foo'是查询路径,而'foo_path'是文件系统上文件的路径。