代码之家  ›  专栏  ›  技术社区  ›  barciewicz

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

  •  0
  • barciewicz  · 技术社区  · 7 年前

    有办法过去吗 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:获取 无法序列化JSON

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   sytech    7 年前

    你的问题是不能通过考试 request celery 需要将传递给芹菜任务的参数序列化。

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

    所以

    task = collect_activities.delay(request)
    

    code = request.GET.get('code', '')
    task = collect_activities.delay(code)
    

    collect_activities 任务定义接受代码作为参数,而不是请求对象。

        2
  •  1
  •   marc_s MisterSmith    7 年前

    我发现这个: 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})
    
    推荐文章