2016-04-06 13 views
1

Ich habe ein Projekt geerbt und versuche es so sauber wie möglich zu machen. Wie es jetzt ist, hat jede Ansicht nur If/Else-Blöcke, die die verschiedenen HTTP-Anforderungsmethoden (GET, POST, DELETE usw.) verarbeiten. Ich hätte gerne eine Ansichtsmethode, die nicht nur jede Route, sondern jede Route + Request-Methodenkombination verarbeiten kann.Kann ich in Pyramid mehrere Ansichten auf dieselbe Route/URL basierend auf der Anfrage-Methode zeigen?

Ich versuche, diese

@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'})) 

aber es funktioniert nicht. Kann jemand helfen?

+1

ich es dachte an get_foo ändern, wie ich die Frage tippte, aber ich dachte, ich würde es beenden, um anderen zu helfen. Ich musste die Ansichtsmethoden umbenennen, so dass sie eindeutig waren, also wurde das erste 'foo()' 'foo_get()' und das zweite wurde 'foo_post()' – c0lon

Antwort

0

versuchen xhr=True bei @view_config hinzufügen, und Sie können Klassenansicht

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'})) 
0

nach Paul Yin Post verwenden. dies ist zu verwenden @view_defaults(route_name='foo') , aber Sie müssen xhr=True in View_config nicht verwenden. xhr verwenden, um Ajax-Anfragen zu bearbeiten. auch, wenn Sie json Renderer keine Notwendigkeit, usding json.dump

1

Sie müssen den Funktionsnamen für GET und POST post_foo für

@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'}))