在Pyramid中,我可以根据请求方法将多个视图指向相同的路径/ URL吗?

时间:2016-04-06 16:15:10

标签: python pyramid httpverbs

我继承了一个项目,我试图让它尽可能干净。就像现在一样,每个视图只有if / else块来处理不同的HTTP请求方法(GET,POST,DELETE等)。我想有一个view方法,不仅可以处理每个路由,还可以处理每个路由+请求方法组合。

我正在尝试这个

@view_config(route_name='foo', request_method='GET', renderer='json')
def foo(request):
    return Response(json.dumps({'route' : 'foo', 'method' : 'GET'}))

@view_config(route_name='foo', request_method='POST', renderer='json')
def foo(request):
    return Response(json.dumpds({'route' : 'foo', 'method' : 'POST'}))

但它没有用。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

您必须将函数名称更改为GET的get_foo和POST的post_foo

    @view_config(route_name='foo', request_method='GET', renderer='json')
    def get_foo(request):
        return Response(json.dumps({'route' : 'foo', 'method' : 'GET'}))

   @view_config(route_name='foo', request_method='POST', renderer='json')
   def post_foo(request):
       return Response(json.dumpds({'route' : 'foo', 'method' : 'POST'}))

答案 1 :(得分:0)

尝试在@view_config中添加xhr=True,您可以使用班级视图

from pyramid.view import view_config, view_defaults

@view_defaults(route_name='foo')
class TutorialViews(object):
    def __init__(self, request):
        self.request = request

    @view_config(request_method='GET', xhr=True, renderer='json')
    def foo_get(self):
        return Response(json.dumpds({'route' : 'foo', 'method' : 'GET'}))

    @view_config(request_method='POST', xhr=True, renderer='json')
    def foo_post(self):
        return Response(json.dumpds({'route' : 'foo', 'method' : 'POST'}))

答案 2 :(得分:0)

根据Paul Yin的帖子。 这是真的使用 @view_defaults(route_name='foo') 但是你不需要在view_config中使用xhr=True。 xhr用于处理ajax请求。 如果你使用json渲染器也不需要使用json.dump