我继承了一个项目,我试图让它尽可能干净。就像现在一样,每个视图只有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'}))
但它没有用。有人可以帮忙吗?
答案 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)
@view_defaults(route_name='foo')
但是你不需要在view_config中使用xhr=True
。
xhr用于处理ajax请求。
如果你使用json渲染器也不需要使用json.dump