首页 > 解决方案 > Django:如何将请求对象从一个视图传递到另一个视图?

问题描述

有没有办法将request对象从一个视图传递到另一个视图?还是我必须将请求分解成单独的部分或使用request.__dict__并传递这些部分?

当前,由于请求无法序列化,代码如下:

def explorer(request):
    collect_activities_init(request)
    return render(request, 'explorer/explorer.html')

def collect_activities_init(request):
    task = collect_activities.delay(request)
    return JsonResponse({'status_url': reverse('explorer:collect_activities_status', kwargs={'task_id': task.id})})

@celery.task(bind=True)
def collect_activities(self, request):
    api = StravaApi()
    code = request.GET.get('code', '') # extract code from redirect URL query string

会给:

WSGIRequest: GET '/explorer/?state=&code=3ba4hgh5ad99ea3cf8e52d8&scope='> 不是 JSON 可序列化的

但是我需要在最后一个函数中获取第一个函数的请求数据,因为它的代码从请求中提取了一些数据。

标签: pythondjangocelery

解决方案


我发现了这个:Django pass object from view to next for processing

最佳答案使用会话来传递保存对象并稍后检索它:

def first_view(request):
    my_thing = {'foo' : 'bar'}
    request.session['my_thing'] = my_thing
    return render(request, 'some_template.html')

def second_view(request):
    my_thing = request.session.get('my_thing', None)
    return render(request, 'some_other_template.html', {'my_thing' : my_thing})

推荐阅读