1

Trailing_slash ツールが機能しません。Trailing_slash ツールのオプションをいじってみましたが、何も効果がないようです。私は CherryPy 3.2.2 と Routes 1.13 を使用しています。末尾にスラッシュを追加したいと思います。デバッグ出力にエラーはありません。

127.0.0.1:8080/blog/ にアクセスすると機能しますが、127.0.0.1:8080/blog にアクセスすると機能しません。

私の構成は次のとおりです。

conf = {
'/': {
    'request.dispatch': setup_routes(),
    # This trailing slash stuff has no effect :(
    'tools.trailing_slash.on': True,
    'tools.trailing_slash.missing': True,
    'tools.trailing_slash.status': 301,
},
'/static': {
       'tools.staticdir.on': True,
       'tools.staticdir.root': os.path.dirname(os.path.abspath(__file__)),
       'tools.staticdir.dir': 'static'
   }
}

ルートの例は次のとおりです。

routes = [["blog_index", "/blog/", {'controller': BlogController(), 'action': 'index','entry_id': 'index'}],]

誰かが私が間違っていることを見ることができますか? バグや重要なドキュメントの不足はありますか? Trailing_slash ツールは Routes Dispatcher で動作しますか?

完全な src: https://bitbucket.org/ddevine/icdy/src

4

3 に答える 3

1

末尾のスラッシュツールは、RoutesDispatcherでは機能しません。末尾のスラッシュツールは、選択されたディスパッチャがcherrypy.request.is_indexTrueまたはFalseに設定されることを想定していますが、これはRoutesDispatcherクラスがまったく実行しないように見えます。したがって、is_index[なし]のままになり、末尾のスラッシュツールは何もしません。ルートに精通している人がCherryPyコードベースでそれを修正したり、is_indexを設定する独自のディスパッチャーを作成したり、事後にis_indexを修正する別のツールを作成したりできる可能性があります。

于 2012-04-23T14:22:45.660 に答える
1

長い間尋ねられましたが、これを機能させる方法は次のとおりです。

def index(index=True):
    cherrypy.request.is_index = index
cherrypy.tools.index = cherrypy.Tool('on_start_resource', index)

config = {
    ...
        'tools.trailing_slash.status': 307,
        'tools.index.on': True,
    ...
}
于 2015-09-24T16:53:26.637 に答える
0

ルートには「インデックス」の概念はありません。同じパスの2つの接続を定義できます。1つは末尾にスラッシュがあり、もう1つはスラッシュがなく、2つの完全に異なるコントローラーやアクションに接続できます。実生活ではこれを行うことはありませんが、ルートでは可能であるため、これに対処するためにtrailing_slashツールを変更する良い方法は実際にはありません。

IMHO、trailing_slashツールは少し欠けているので、おそらく、InternalRedirectミドルウェアが現在CherryPyで行っているように、デフォルトのWSGIミドルウェアパイプラインの前にあるWSGIミドルウェアのレベルに上げる必要があります。たとえば、RouteDispatcherをscript_nameの下にマウントした場合、ルート内のすべてのルートはスラッシュで始まる必要があるため、CPでscript_nameの後に末尾のスラッシュを配置するためにtrailing_slashツールを配置することはできません。一致させようとしたときにpath_infoが空の文字列である場合、RoutesException。

于 2012-05-04T22:14:51.307 に答える