模拟异步处理请求

时间:2014-06-06 04:26:26

标签: django django-rest-framework

我想实现一些可能需要很长时间的现有DRF API方法(特别是列表方法)的异步版本。我的想法是捕获经过身份验证的用户ID,他想要执行的方法和查询字符串;然后排队任务以运行该方法。似乎最简单的事情是任务处理程序为实际的API方法创建一个模拟请求,然后将结果存储在某处以便轮询处理程序读取。

我的问题是:如何有效地创建模拟Django请求(包括用户和查询字符串),然后将其用于直接创建视图集或将请求分派到相应的URL路径?从API的角度来看,Django测试客户端实际上似乎非常适合我的意图,但我不确定在生产中使用它是否是一件好事?

感谢。

1 个答案:

答案 0 :(得分:4)

我明白了。这是一个摘录:

from django.http import request, QueryDict

view_kwargs = view.kwargs
query_params = request.QUERY_PARAMS

req = request.HttpRequest()
req.user = user
req.method = 'GET'
req.GET = QueryDict(None).copy()
req.GET.update(query_params)

resp = viewset_class.as_view({'get': 'list'})(req, **view_kwargs).render()