外部のPythonで関数に渡された値を確認する方法

外部から関数に渡されたいくつかの値をチェックする方法に関する、 Python初心者向けの小さなHowTo 。 実際、私はDjangoでそれを必要としていましたが、このフレームワークに固有のものはありません...

UPD Lyrical余談:当初、デコレータの仕事に対する曲がった理解のために、私は多くのナンセンスを書きました。 現在、決定ははるかに正確で直接的です。 さらに、私はそれを明確に説明することさえできます。それについて私はコメンテーターにとても感謝しています。

まず、 デコレータ作業に慣れることをお勧めします(非常に慎重に!)。

私が抱えていた問題は、文字通り次のとおりでした:

Djangoには、ユーザープロファイルにいくつかの変数があるかどうかを確認する前に、ある種の関数があります。

具体的な解決策は次のとおりです。

def check_nickname(funct): def wrapper(request, *args, **kwargs): if request.user.profile.nickname: return funct(request, *args, **kwargs) else: from django.shortcuts import render_to_response from django.template import RequestContext return render_to_response('need_profile.html', RequestContext(request)) return wrapper 

check_nickname関数は、 Django形式の関数のデコレーターです。これについては、特定のタイプのrequestパラメーターが渡されることが確認されています。 装飾された関数は、装飾された関数の代わりに返されるwrapper渡されます。

デコレータの原理:

 @f1 def func(x): pass # : def func(x): pass func = f1(func) 


つまり 実際、元の関数の代わりに、 wrapper関数はcheck_nicknameデコレータによって返されます。 また、ビューの元の機能を目的としたすべてのパラメーターwrapper受け取るwrapperあり、次のアクションのロジックは既にそれらに基づいています。

明確にくれたDeepwalker再び感謝ます。

Source: https://habr.com/ru/post/J134787/


All Articles