各リクエストの前に条件を確認し、さまざまなビューを呼び出したいと思います。それはどのように達成されますか?
私が考えることができる1つの解決策は、サブスクライバーNewRequestに何かを追加することですが、私は立ち往生しています:
@subscriber(NewRequest)
def new_request_subscriber(event):
if condition:
#what now?
各リクエストの前に条件を確認し、さまざまなビューを呼び出したいと思います。それはどのように達成されますか?
私が考えることができる1つの解決策は、サブスクライバーNewRequestに何かを追加することですが、私は立ち往生しています:
@subscriber(NewRequest)
def new_request_subscriber(event):
if condition:
#what now?
@subscriber(NewRequest)
def new_request_subscriber(event):
if condition:
raise pyramid.httpexceptions.HTTPFound(location=somelocation) ## to issue a proper redirect
詳細はこちら: http://pyramid.readthedocs.org/en/latest/api/httpexceptions.html#pyramid.httpexceptions.HTTPFound
「条件をチェックして...さまざまなビューを呼び出す」ためのさらに別のオプションは、カスタムビュー述語を使用することです。
def example_dot_com_host(info, request):
if request.host == 'www.example.com:
return True
それはそこにあるカスタム述語です。ホスト名がwww.example.comの場合、Trueを返します。使用方法は次のとおりです。
@view_config(route_name='blogentry', request_method='GET')
def get_blogentry(request):
...
@view_config(route_name='blogentry', request_method='POST')
def post_blogentry(request):
...
@view_config(route_name='blogentry', request_method='GET',
custom_predicates=(example_dot_com_host,))
def get_blogentry_example_com(request):
...
@view_config(route_name='blogentry', request_method='POST',
custom_predicates=(example_dot_com_host,))
def post_blogentry_example_com(request):
...
ただし、特定の問題(ユーザーにページを表示する権限がない場合はサインインページを表示する)の場合、これを実現するためのより良い方法は、ビューの権限を設定して、ユーザーに権限がない場合にフレームワークが例外を発生させることです。サインインフォームを表示 するその例外のカスタムビューを登録します。
「条件」または「異なるビューを呼び出す」の意味についてほとんど情報を提供していないので、リダイレクトを呼び出したくないが、代わりに別の URL が実行されているとアプリケーションに認識させたいと仮定します。要求されました。これを行うにはpyramid_rewrite
、これらのことに対して非常に便利な を参照するか、NewRequest
Pyramid がビューにディスパッチする前に呼び出されるため、サブスクライバー内のリクエストのパスを変更するだけです。
if request.path == '/foo':
request.path = '/bar':
config.add_route('foo', '/foo') # never matches
config.add_route('bar', '/bar')