0

私は django の初心者で、チュートリアル (パート 04) を終えたばかりなので、引き続きプロジェクトに認証を追加できるかどうかを確認したいと思います。polls_results ページへのアクセスを制限したいのですが、ログインしているときにのみ表示されます。最後の部分では、結果ページは汎用ビュー (DetailView) によって提供されます。これをサブクラス化し、オーバーライドされたディスパッチにメソッド デコレーターを追加しました。方法。

class VoteResults(DetailView):
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(VoteResults, self).dispatch(*args, **kwargs)

チュートリアルに従って、投票を送信した後、not authorized error(401?) が表示されることを期待していますが、間違いなくログインしていなくても結果ページ (エラーなし) が表示されます。足りないものはありますか? 私が信じているドキュメントで示されているように、すべてのミドルウェアとインストールされたアプリは settings.py にあります。

ここで私が間違っている手がかりはありますか?

おそらく発送方法名のタイプミスです。したがって、デコレータはヒットしませんでした。

4

1 に答える 1

0

デコレータの代わりに、同様の動作をする mixin を使用してください。自分で作成することもできますが、 Django BracesLoginRequiredMixinから使用することを強くお勧めします。

編集:詳しく説明すると、間違ったメソッドに適用しているため、メソッドデコレータが機能していません。を使用できますlogin_requiredが、URLConf で実際のビューを呼び出す場合は、次のようになります。

url(r'^my_url$', login_required(MyClassView.as_view()), name='my_view')

ただし、ミックスインはよりクリーンで一般的なアプローチです。

于 2013-09-11T23:16:32.847 に答える