如何从falcon应用程序提供静态网页?

way*_*are 7 python falconframework

我是python的新手,因此是猎鹰.我开始开发一个RESTful API,到目前为止猎鹰是非常棒的.提供静态网页还有一些其他要求,我不想编写应用程序或为此生成服务器.

是否有可能从猎鹰应用程序服务静态网页?

Mar*_*cia 12

首先也是最重要的,我不得不说你不想这样做.您应该做的是在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())
Run Code Online (Sandbox Code Playgroud)

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

  • 根据静态内容的大小,您可能需要设置`resp.stream = open('index.html','rb')`以便Falcon从磁盘流式传输文件数据,而不是将其全部读入内存第一. (4认同)

Per*_*z30 11

你应该使用:

api.add_static_route('/foo', foo_path)
api.add_static_route('/foo/bar', foobar_path)
Run Code Online (Sandbox Code Playgroud)

来自文档


joa*_*aes 6

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

import falcon
class StaticResource(object):
    def on_get(self, req, resp, filename):
        # do some sanity check on the filename
        resp.status = falcon.HTTP_200
        resp.content_type = 'appropriate/content-type'
        with open(filename, 'r') as f:
            resp.body = f.read()


app = falcon.API()
app.add_route('/static/{filename}', StaticResource())
Run Code Online (Sandbox Code Playgroud)

  • 从falcon 1.4开始,你可以使用`add_static_route`.[[changelog](https://falcon.readthedocs.io/en/stable/changes/1.4.0.html)] [[docs](https://falcon.readthedocs.io/en/stable/api/api html的#falcon.API.add_static_route)]. (3认同)