基于Python Web框架中的Accept标头路由请求

我对不同的Web框架(Django,web.py,Pyramid和CherryPy)有一些经验,我想知道哪一个更容易,希望更清洁,将路由调度程序实现到基于的不同“视图/处理程序” “Accept”标头和HTTP方法,例如:

Accept: application/json
POST /post/

处理不同于:

Accept: text/html
POST /post/

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

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

我知道在url中使用扩展名的替代方法,比如/post.json或/post/.json,但是我想保留相同的网址?

最佳答案
如果您正在寻找的是一个可以轻松完成此任务的框架,那么请使用pyramid.

金字塔视图定义使用predicates而不仅仅是路由,并且视图仅在所有谓词匹配时匹配.一个这样的谓词是接受谓词,它完全符合你的要求;根据Accept标头进行视图切换简单易行:

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 Web框架中的Accept标头路由请求 - 代码日志