12

まず第一に、これはこれ同じではありません。ModelBackend にはメンバーがありません。request

グローバル リクエスト オブジェクトまたはセッション ID にアクセスせずに、現在のユーザーのセッションにアクセスしたいと考えています。

なんで?を拡張して、独自の認証バックエンドを作成しModelBackendました。その中で、すべてのリクエストで呼び出される関数がありますget_user (self, user_id)(これはDjango認証ミドルウェアによって自動的に行われます)。残念ながら、 にget_userはアクセスできませんがrequest、それでも私の場合、セッション内のデータを確認したいのです (なぜですか?ローカル データベースがなく、リモート ミドルウェアからすべてのデータを取得するためです。セッションはある種のキャッシングを行うための快適な方法)。

4

3 に答える 3

6

小さなThreadLocalMiddlewareを使用できます。リクエストオブジェクトをどこでも利用できるようにします。

from django_tools.middlewares import ThreadLocal

request = ThreadLocal.get_current_request()
# request.session <-- is now available

settings.py の MIDDLEWARE_CLASSES タプルにミドルウェアを追加することを忘れないでください。

MIDDLEWARE_CLASSES = (
    ...
    'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware',
    ...
)
于 2013-01-14T05:53:58.807 に答える
4

( RemoteUserBackendfrom django.contrib.auth.backends) は、特殊なミドルウェア を使用しRemoteUserMiddlewareて要求データにアクセスします。たぶん、あなたもこの方法でそれを行うことができます。

于 2009-07-10T20:19:44.953 に答える
0

authenticate関数を呼び出すたびに、'request' パラメータを関数に渡すこともできます。

def authenticate(self, request, **kwargs):
    ....
于 2013-05-08T13:39:46.257 に答える