【发布时间】:2021-06-06 15:57:15
【问题描述】:
我的项目有很多 API。但现在我必须在开始执行其中的代码之前检查所有这些 API。我必须确保 API 仅在特定表单的停用日期大于 datetime.date.today() 时才返回数据。查询集将是 -
available_for_entry = Forms.objects.filter(form_id=form_id, deactivate_date__gte=today_date).exists()
执行此操作的一种方法是在每个 API 中编写该查询集,然后使用 if available_for_entry: 条件。但是,我想知道是否有任何其他方法可以在不多次编写类似条件的情况下实现这一目标。
我试图通过编写装饰器来实现这一点,但我无法将基于函数的 API 中的 form_id 值传递给该装饰器。代码快照是...
def is_form_available(func):
def checking():
today_date = datetime.date.today()
available_for_entry = Forms.objects.filter(form_id=form_id, deactivate_date__gte=today_date).exists()
if available_for_entry:
func()
else:
print('form is not available now')
return checking
@api_view(['POST'])
@is_form_available
def question_list(request):
form_id = request.POST.get('form_id')
parameter_list = (FormParameters.objects.filter(mappings__form__formparametermappings= form_id).all())
serializer = FormParametersQuizSerializer(parameter_list, many=True)
return serializer.data
【问题讨论】:
标签: python-3.x django django-rest-framework python-decorators