1

各リクエストの前に条件を確認し、さまざまなビューを呼び出したいと思います。それはどのように達成されますか?

私が考えることができる1つの解決策は、サブスクライバーNewRequestに何かを追加することですが、私は立ち往生しています:

@subscriber(NewRequest)
def new_request_subscriber(event):
  if condition:
    #what now?
4

3 に答える 3

3
@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

于 2012-04-27T14:50:33.440 に答える
1

「条件をチェックして...さまざまなビューを呼び出す」ためのさらに別のオプションは、カスタムビュー述語を使用することです。

Cris McDonoughのブログ投稿から:

   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):
      ...

ただし、特定の問題(ユーザーにページを表示する権限がない場合はサインインページを表示する)の場合、これを実現するためのより良い方法は、ビューの権限を設定して、ユーザーに権限がない場合にフレームワークが例外を発生させることです。サインインフォームを表示 するその例外のカスタムビューを登録します。

于 2012-04-28T08:12:47.317 に答える
1

「条件」または「異なるビューを呼び出す」の意味についてほとんど情報を提供していないので、リダイレクトを呼び出したくないが、代わりに別の URL が実行されているとアプリケーションに認識させたいと仮定します。要求されました。これを行うにはpyramid_rewrite、これらのことに対して非常に便利な を参照するか、NewRequestPyramid がビューにディスパッチする前に呼び出されるため、サブスクライバー内のリクエストのパスを変更するだけです。

if request.path == '/foo':
    request.path = '/bar':

config.add_route('foo', '/foo') # never matches
config.add_route('bar', '/bar')
于 2012-04-27T15:12:01.417 に答える