Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何将请求对象从一个视图传递到另一个视图?_Python_Django_Celery - Fatal编程技术网

Python Django:如何将请求对象从一个视图传递到另一个视图?

Python Django:如何将请求对象从一个视图传递到另一个视图?,python,django,celery,Python,Django,Celery,是否有方法将请求对象从一个视图传递到另一个视图?或者我必须将请求分解成单独的部分,或者使用请求。\uuuu dict\uuuu并传递它们吗 目前,由于请求无法序列化,因此需要以下代码: def explorer(request): collect_activities_init(request) return render(request, 'explorer/explorer.html') def collect_activities_init(request): t

是否有方法将
请求
对象从一个视图传递到另一个视图?或者我必须将请求分解成单独的部分,或者使用
请求。\uuuu dict\uuuu
并传递它们吗

目前,由于请求无法序列化,因此需要以下代码:

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:获取 “/explorer/?state=&code=3ba4hgh5ad99ea3cf8e52d8&scope=”> JSON不可序列化

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

我发现:

顶部答案使用会话来传递保存对象并稍后检索:

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})
我发现:

顶部答案使用会话来传递保存对象并稍后检索:

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})

您遇到的问题不是在这些函数之间传递
请求
,而是
芹菜
要求传递给芹菜任务的参数被序列化

这里的简单解决方案是从请求中提取所需的属性,然后将这些属性传递给任务

所以不是

task = collect_activities.delay(request)


当然,您需要更改
collect\u活动
任务定义以接受代码作为参数,而不是请求对象。

您遇到的问题不是在这些函数之间传递
请求
,而是
芹菜
需要将传递给芹菜任务的参数序列化

这里的简单解决方案是从请求中提取所需的属性,然后将这些属性传递给任务

所以不是

task = collect_activities.delay(request)


当然,您需要更改
collect\u活动
任务定义以接受代码作为参数,而不是请求对象。

我刚刚尝试了,但在第一个\u视图中出错:属性错误:对象没有属性“items”,我刚刚尝试了,在第一个\u视图中出错:属性错误:对象没有属性“items”