2

ドキュメントには、次のように「accept」view_config パラメータを使用できることが示されているようです。

@view_config(
    route_name='data',
    request_method='POST',
    accept='application/json',
    renderer='json',
)
def json_post_view(self):
  ...

@view_config(
    route_name='data',
    request_method='POST',
    renderer='blah:templates/data.mako',
)
def form_post_view(self):
  ...

ただし、実際には、次のように wget を使用して URL に投稿します。

wget -q -O - --post-file=data.json http://localhost:6543/data

また:

wget -q -O - --post-file=data.json --header="Content-type: application/json" http://localhost:6543/data

またはブラウザを使用してURLに投稿します...

すべてが同じ結果になります。json_post_view() ビューが呼び出されます。

ここで何が間違っていますか?accept パラメータはまったく何もしていないようです。

4

2 に答える 2

9

行ったように、述語を使用してさまざまなビューにディスパッチする必要があります。ただし、応答を形成するacceptためのヘッダー用です。Accept受信データは、Content-Typeピラミッドにデフォルトの述語が付属していないヘッダーにあります。ただし、自分で簡単に作成できます。

class ContentTypePredicate(object):
    def __init__(self, val, config):
        self.val = val

    def text(self):
        return 'content type = %s' % self.val
    phash = text

    def __call__(self, context, request):
        return request.content_type == self.val

config.add_view_predicate('content_type', ContentTypePredicate)

@view_config(content_type='application/json')
# ...
于 2013-11-05T16:06:14.513 に答える
3

Content-typeヘッダーは、リクエストのボディのタイプを指定します。Acceptサーバーが返すタイプについては、ヘッダーを使用する必要があります。

ソース: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requests

于 2013-11-05T09:21:58.653 に答える