我对不同的 Web 框架(Django、web.py、Pyramid 和 CherryPy)有一些经验,我想知道在哪个框架中实现路由调度程序到不同的“ View /处理程序”会更容易,希望更清晰“接受” header 和 HTTP 方法,例如:

Accept: application/json
POST /post/

处理方式不同于:
Accept: text/html
POST /post/

因此,请求被路由到 MIME“application/json”和 HTTP 方法“POST”的相应处理程序的特定 View 。

我确实知道如何在 CherryPy 中实现类似的东西,但是我无法使用 CherryPy 工具进行请求的内部重定向,因为我是直接调用特定方法而不是从调度程序自动调用。另一种选择是从头开始实现一个全新的调度程序,但这是最后一个选择。

我知道在 /post.json/post/.json 等网址中使用扩展名的替代方法,但我希望保持相同的网址?

最佳答案

如果您正在寻找的只是一个可以轻松完成此操作的框架,那么请使用 pyramid

Pyramid View 定义是使用 predicates 定义的,而不仅仅是路由,并且 View 仅在所有谓词都匹配时才匹配。其中一个谓词是 accept 谓词,它完全符合您的要求;根据 Accept header 使 View 切换变得简单易行:

from pyramid.view import view_config

@view_config(route_name='some_api_name', request_method='POST', accept='application/json')
def handle_someapi_json(request):
    # return JSON

@view_config(route_name='some_api_name', request_method='POST', accept='text/html')
def handle_someapi_html(request):
    # return HTML

关于python - 基于 Python Web 框架中的 Accept header 路由请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13998607/

10-12 16:47
查看更多