首页 文章

用Eve来处理html请求

提问于
浏览
2

我正在尝试构建一个支持MongoDB的Flask应用程序,该应用程序从相同的 endpoints 提供服务:

  • 默认情况下为HTML Web界面

  • 如果 Content-Type == application/json 的JSON响应

我们的想法是,用浏览器消费我的应用程序的用户和以编程方式使用我的API的服务都可以命中http://myapp.com/users/12345前者提供HTML响应,后者提供JSON响应 .

据我所知,这与'pure' REST保持一致,与从单独的路径(例如http://myapp.com/api/users/12345)提供API的传统相反 .

在Eve文档中没有讨论视图,只是说默认情况下结果是JSON,如果请求则是XML .

是否有任何干净的方法来覆盖此行为,以便:

  • 如果 Content-Type == application/json ,则提供标准的Eve JSON响应

  • 否则,视图会将模板应用于Eve返回的数据以生成HTML响应吗?

这似乎是一种创建RESTful和DRY应用程序的优雅方法 .

1 回答

  • 3

    您可以查看Eve-Docs扩展,该扩展在现有的Eve驱动的MongoDB REST服务之上实现HTML /docs endpoints .

    记住Eve是一个Flask应用程序(实际上是一个子类),所以你可以用Flask做的所有事情你也可以用Eve做(比如装饰渲染函数等)

    更新:这是一个小示例代码片段,它将自定义 /hello endpoints 添加到Eve驱动的API(source) . 您可以看到与标准Flask endpoints 非常相似:

    from eve import Eve
    app = Eve()
    
    @app.route('/hello')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()
    

相关问题