私のアプリでは、ログインする必要があるユーザーに応じて 2 つの異なるログイン ページがありますsettings.LOGIN_URL
。
クラスベースのビューも使用しているため、使用する必要がありますmethod_decorator(login_required)
。
現時点では、クラス デコレータ (私は Python 2.7 を使用しています) を使用していlogin_url
ます。コードはスニペットであり、手で入力されているため、タイプミスがある可能性があります。
login_required_m = method_decorator(login_required)
def requires_role1(view):
def requires_m(func):
@wraps(func)
def wrapper(self, request, *args, **kwargs):
# I need to process request.user
if (not ok):
return redirect(urlresolvers.reverse('some_name'))
else:
f = login_required_m(func)
return f(self, request, *args, **kwargs)
return wrapper
view.get = requires_m(view.get)
view.post = requires_m(view.post)
return view
本当に気になる行は次のとおりです。
`f = login_required_m(func)`
関数ベースのビューでは、次のように定義できます。
`f = login_required(func, login_url='some_reverse_path')`
しかし、では、パラメーターとしてmethod_decorator(login_required)
渡すことができなくなりました。login_url
私は 2 つの異なるログイン URL を持っているので、そうする必要があることを覚えておいてください。それらはまったく異なるユーザー名とパスワードのセットを提供します (同じユーザー名が異なるパスワードの両方のセットにあり、異なる人に関連付けられている可能性があります)。
これを達成するために私が何をすべきかについての助けをいただければ幸いです。
編集
受け入れられた答えによると、ここに私が採用した解決策があります:
def login_required_partial(func):
return partial(login_required, login_url=urlresolvers.reverse('role1_login'))
login_required_m = method_decorator(login_required_partial)
残りのコードは変更せずに残しました。そして、渡されたパラメータがない場合、すべてうまくいくようulr(r'path/(?P<param1>.*)', CBV.as_view(), name='path_name')
です。
これを今すぐ修正する良い方法を持っている人はいますか?