正規表現パターンに対して特定の引数値をチェックし、それらが一致する場合にのみ続行したいと思います。これはアプリ内の多くの場所で発生するため、関数にチェックを実行させ、必要なときにいつでもその関数を呼び出すことにしました。さて、ほとんどの場合、ビューの最初でチェックを実行する必要があるので、次のようなデコレータとして作成しました。
def validate(f):
def _inner(request, argument=None):
if argument is None:
return HttpResponse(content="No argument given", status=400)
elif not re.match('^SOME_REGEX$', argument):
return HttpResponse(content="Invalid argument", status=400)
else:
return f(request, argument)
return _inner
ただし、ネストされた条件の一部として、関数内からそのチェッカーを呼び出す必要がある場合もあります。直接呼び出すことはできないようvalidate(argument)
です。通常の関数だけでなく、デコレータと同じコードを使用できる方法はありますか?または、2回入力する必要がありますか?