2013-02-06 4 views
2

내가 피라미드 웹 서비스를 매개 변수, 다음과 같이 코드 샘플은 다음과 같습니다피라미드 경로 매칭 및 쿼리

보기 선언 :

@view_config(route_name="services/Prices/GetByTicker/") 
def GET(request): 
    ticker = request.GET('ticker') 
    startDate = request.GET('startDate') 
    endDate = request.GET('endDate') 
    period = request.GET('period') 

라우팅 :

config.add_route('services/Prices/GetByTicker/', 'services/Prices/GetByTicker/{ticker}/{startDate}/{endDate}/{period}') 

지금 내가 이것을 알고를 모두 망쳐 놓았지만 피라미드의 관습을 알지 못합니다. 현재이 요청은 뷰에 성공적으로 라우팅되기 때문에 작동하지만, "Dictionary object not callable"예외가 발생합니다.

URL은 끔찍한 같습니다 루트/서비스/가격/GetByTicker/시세 = APPL /의 startDate = 19,981,212/endDate가 = 20,121,231/기간 =

가 이상적으로 사용할 수 있도록하고 싶습니다 D @

URL에 뭔가 같은 : 루트/서비스/가격/GetByTicker/시세 = APPL &의 startDate = 19981212 & endDate가 = 20121231 & 기간 = D @

모든 피라미드는 일을 bods 내가 잘못하고있는 것을 설명하기 위해 5 분이 걸릴 의지가 있단 말인가?

당신에게서

답변

11

샘플 코드, 난 당신이 그렇게 그 다음이

config.add_route('services/Prices/GetByTicker/', 'services/Prices/GetByTicker/') 

처럼해야 URL Dispatch

을 사용하여 생각처럼 URL : 루트/서비스/가격/GetByTicker/시세 @
APPL = &는 startDate를는 = 19,981,212 20,121,231 = endDate가 & & 기간 = D는
그것을

,369 일치 할

--edit--
당신이 ROUTE_NAME은 "서비스/가격/GetByTicker"같은 이름을 사용할 필요가 없습니다, 당신은 GET의 PARAMS는 request.params['key']
보기 선언을 사용하여 얻을 수 있습니다 :

@view_config(route_name="services_Prices_GetByTicker") 
def services_Prices_GetByTicker(request): 
    ticker = request.params['ticker'] 
    startDate = request.params['startDate'] 
    endDate = request.params['endDate'] 
    period = request.params['period'] 

을 라우팅 :

config.add_route('services_Prices_GetByTicker', 'services/Prices/GetByTicker/') 
+0

고맙습니다. 정확히 내가 무엇을 찾고 있었는지. 그것은 항상 당신이 설명서에서 찾을 수없는 간단한 대답입니다 ... –

5

쿼리 문자열은 request.GET 사전으로 바뀝니다. 대괄호를 사용하여 항목에 액세스하는 대신 사전을 호출하기 위해 괄호를 사용하고 있습니다. URL이 들어 같은 루트/서비스/가격/GetByTicker /? 시세 = APPL &의 startDate = 19981212 & endDate가 = 20121231 & 기간 = D @

request.GET['ticker'] # -> 'APPL' or an exception if not available 
request.GET.get('ticker') # -> 'APPL' or None if not available 
request.GET.get('ticker', 'foo') # -> 'APPL' or 'foo' if not available 
request.GET.getall('ticker') # -> ['APPL'] or [] if not available 

마지막 옵션이 유용합니다 ticker 번을 여러 번 제공해야합니다.

request.paramsrequest.GETrequest.POST의 조합입니다. 후자는 양식 업로드시 요청의 본문을 나타내는 사전입니다.

어쨌든 대답은 request.GET('ticker')이 구문 적으로 내가 언급 한 옵션 중 하나가 아니라는 것입니다. :-)

+0

네, 그거 ... ;-) –

+0

나는 처음에 내가 발견 한 몇 가지 샘플 코드에 의해 그릇 인도되었습니다. 그 경로를 절대 떠나지 말라는 알림. 멀티 티커 질문. 그러한 요청은 어떻게 형성 될 것입니까? ticker = AAPL & ticker = MSFT로 전달 하시겠습니까? 또는 시세 = [AAPL, MSFT] –

+0

'ticker = AAPL & ticker = MSFT' –