現在、ユーザがアクセスできるのはviews.py
の機能があります。私はそれを一般にアクセス可能にするよう依頼されており、現在私の意見には@login_required
デコレータを使用しています。提供されているオブジェクトに基づいて条件付きでこのデコレータを適用する方法はありますか?条件付きでDjangoでlogin_requiredデコレータを適用する
例えば、私のviews.py
の一部:
@login_required
def details(request, object_id):
o = get_object_or_404(Model, pk=object_id)
if o.user_id == request.user.pk:
return render(request, 'app/details.html')
else:
return redirect('app:home')
私が何をしたい
:もちろん
if not o.is_public:
@login_required
def details(request, object_id):
o = get_object_or_404(Model, pk=object_id)
if o.user_id == request.user.pk:
return render(request, 'app/details.html')
else:
return redirect('app:home')
、コードは動作しません(私)それが有効なPythonではありませんので(ii)まずオブジェクトを取得する必要があります。私はDjangoを使った洗練されたソリューションがあると信じています。これはWebアプリケーションでは非常に一般的な機能ですが、ドキュメントを無駄にしてしまいました。私は@login_required
デコレータを別のデコレータで囲むべきだと思うが、私はあまりにもPythonのデコレータに慣れていない。どんな助けもありがとうございます。
おそらくlogin_requiredデコレータを書き換える必要があります。機能だけでなく、別の外部パラメータ(この場合はo.is_public)も受け入れる必要があります。 o.is_publicがTrueの場合はログイン検証を行い、そうでない場合は渡します。 – Dan
@Alasdairあなたが正しいです、私はミスタイプしたでしょう、それを修正します。私は 'それはo.is_public'ではないことを意味した –