[編集] したがって、私のコードは正常に動作しているようです。別のコード + 疲労が問題です [/編集]。
いくつかの必要なリクエスト キーを簡単にチェックするデコレータがあります。
def fields_required(*fields):
assert isinstance(fields, tuple), "Fields must be of type tuple."
def wrap_func(fn):
def wrapper(cls, request, *args, **kwargs):
print 'oh hi'
missing_fields = []
for field in fields:
if not request.REQUEST.has_key(field):
missing_fields.append(field)
if len(missing_fields) > 0:
#maybe do smth here
return HttpResponseBadRequest()
return fn(cls, request, *args, **kwargs)
return wrapper
return wrap_func
フィールドの 1 つが欠落している場合、HTTP 403 Bad Request ステータス コードが期待されますが、デコレータはそのコードを実行しません。
私のビューファイルの基本的な表現:
class ViewA(View):
@fields_required('name','api_key')
def get(self, request, *args, **kwargs):
# some logic
class ViewB(View):
@fields_required('SHOULD_NEVER_SEE','THIS_STUFF')
def get(self, request, *args, **kwargs):
# some logic
ブラウザーで ViewA を開くと、コンソール出力は次のようになります。
('name', 'api_key')
('SHOULD_NEVER_SEE','THIS_STUFF')
ViewB のデコレータが実行される理由と、コンソールに「こんにちは」が表示されない理由がわかりません。洞察はありますか?