私のモデルには「作成」されたタイムスタンプがあります。また、それらは 1 日後に期限切れになるため、再作成する必要があります。
クライアントGETが TastyPie API からリソースを取得しようとしたときに、リソースの有効期限が切れているかどうかを確認し、ビジネス ロジックを実行するコードを作成するにはどうすればよいですか。フィルターを使用して期限切れのリソースを除外できることはわかっていますが、期限切れのリソースを削除して新しいリソースを作成し、それらを結果に返すことはできますか?
私のモデルには「作成」されたタイムスタンプがあります。また、それらは 1 日後に期限切れになるため、再作成する必要があります。
クライアントGETが TastyPie API からリソースを取得しようとしたときに、リソースの有効期限が切れているかどうかを確認し、ビジネス ロジックを実行するコードを作成するにはどうすればよいですか。フィルターを使用して期限切れのリソースを除外できることはわかっていますが、期限切れのリソースを削除して新しいリソースを作成し、それらを結果に返すことはできますか?
はい、できます。たとえば、リソースのobj_get()メソッドをオーバーライドできます。
そのソースコードは次の場所にあります:https ://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py#L1895 、次のようになります。
def obj_get(self, request=None, **kwargs):
"""
A ORM-specific implementation of ``obj_get``.
Takes optional ``kwargs``, which are used to narrow the query to find
the instance.
"""
try:
base_object_list = self.get_object_list(request).filter(**kwargs)
object_list = self.apply_authorization_limits(request, base_object_list)
stringified_kwargs = ', '.join(
["%s=%s" % (k, v) for k, v in kwargs.items()]
)
if len(object_list) <= 0:
raise self._meta.object_class.DoesNotExist(
"Couldn't find an instance of '%s' which matched '%s'." %
(self._meta.object_class.__name__, stringified_kwargs)
)
elif len(object_list) > 1:
raise MultipleObjectsReturned(
"More than '%s' matched '%s'." % (
self._meta.object_class.__name__,
stringified_kwargs
)
)
return object_list[0]
except ValueError:
raise NotFound(
"Invalid resource lookup data provided (mismatched type)."
)
object_listそのコード内で取得したものを確認してから、適切なアクションを適用できます。
または、途中でを使用して、単一のリソースへのリクエストを具体的に処理するget_detail()メソッドをオーバーライドすることもできます。GETobj_get()
これを行うより良い方法は、メソッドをオーバーライドするget_object_listことです。これはここに文書化されています: http://django-tastypie.readthedocs.org/en/latest/cookbook.html#per-request-alterations-to-the-queryset