5

Pyramid Webサービスがあり、コードサンプルは次のとおりです。

ビュー宣言:

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

これがすべて台無しになっていることはわかっていますが、Pyramidの規則が何であるかはわかりません。現時点では、リクエストがビューに正常にルーティングされる限りこれは機能しますが、「ディクショナリオブジェクトを呼び出せません」という例外が発生します。

URLはひどいようです:

@ root / services / Prices / GetByTicker / ticker = APPL / startDate = 19981212 / endDate = 20121231 / period = d

理想的には、次のようなURLを使用できるようにしたいと思います。

@ root / services / Prices / GetByTicker /?ticker = APPL&startDate = 19981212&endDate = 20121231&period = d

私が間違っていることを説明するのに5分かかることをいとわないピラミッドはありますか?

4

2 に答える 2

14

サンプルコードから、 URLディスパッチを使用していると思います

こうなるはずです

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

次に、次のようなURL:
@ root / services / Prices / GetByTicker /?ticker = APPL&startDate = 19981212&endDate = 20121231&period=d
が一致します

--edit--route_name
に「services/Prices / GetByTicker」のような名前を使用する必要はありません。また、GETパラメータを取得してrequest.params['key']
View宣言を使用できます。

@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/')
于 2013-02-06T11:52:09.587 に答える
5

クエリ文字列がrequest.GET辞書に変換されます。角かっこを介してアイテムにアクセスする代わりに、括弧を使用して辞書を呼び出しています。次のようなURLの場合

@ root / services / Prices / GetByTicker /?ticker = APPL&startDate = 19981212&endDate = 20121231&period = 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.paramsはの組み合わせでrequest.GETありrequest.POST、後者はフォームのアップロードでリクエストの本文を表す辞書です。

とにかく、答えはrequest.GET('ticker')構文的に私が言及したオプションの1つではないということです、それをやめなさい。:-)

于 2013-02-06T16:30:09.013 に答える