我正在开发一个简单的视图。如果请求用户已经有一天没有看到该对象的现有用户帐户或ip地址,我只想计算查看次数。我正在使用Django和Djangorest框架
下面是一些检索操作的示例代码
def get_ip_address(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def create_post_view(post, user, request):
print("before sleeping")
PostView.objects.create(post=post,
user=user,
ip_address=get_ip_address(request)
)
post.view_count += 1
post.save(update_fields=("view_count", ))
print(post)
class PostModelViewSet(ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = [IsAdminOrReadOnly, ]
pagination_class = DefaultLimitOffsetPagination
def retrieve(self, request, *args, **kwargs):
obj = self.get_object()
user = request.user if request.user.id else None
vwd = PostView.objects.filter(post=obj.id,
user=user,
ip_address=get_ip_address(request),
viewed_on__startswith=date.today())
if not vwd:
create_post_view(obj, user, request)
obj.view_count += 1
return Response(PostDetailSerializer(obj).data,
status=status.HTTP_200_OK)
这很简单。我从数据库中获取请求对象,并检查用户是否在一天内查看了该对象或查看了相同的ip地址。如果post对象没有被查看,我只需要创建PostView实例,这意味着下一个视图不会在被查看的当天被计算在内
我的问题是:我如何运行它,让它返回Response对象,同时启动函数,而不是等待它完成
提前谢谢
你可以用芹菜。但是,考虑到问题的简单性,我认为使用django后台任务更容易https://django-background-tasks.readthedocs.io/en/latest/
就这么简单:
所需的函数将异步执行
相关问题 更多 >
编程相关推荐