Django将上下文发送到多个视图

时间:2019-11-28 15:49:43

标签: django post django-forms django-templates django-views

我正在尝试在Django中完成以下任务:

  1. 第一页:用户填写了一个大型的Job申请表,该数据为 发送到第二页

  2. 第二页:用户查看之前填写的数据并进入第三页

  3. 第三页:用户付款(从第二页开始),一旦付款,则仅将所有这些数据保存到DB。

我已经完成了填写表单的第一页工作,然后将该数据发送到第二页。

这是我的 views.py

def applyJob(request,id=None):
        job = get_object_or_404(AddJob, id=id)
        if request.method == 'POST':
            context = {
                'jobName': job.jobName,
                'jobID' :  job.pk,
                'cfName' : request.POST.get('candidateFirstName'),
                'cmName' : request.POST.get('candidateMiddleName'),
                'clName' : request.POST.get('candidateLastName'),
                ......
                return render(request,'reviewAppliedJob.html',context)
        else:
            context ={
                "jobName": job.jobName,
                "id": id,
            }
            return render(request,'applyJob.html',context)

由于我使用return render(request,'reviewAppliedJob.html',context)发送上下文数据,因此URL不会更改,因此不会转到我的 reviewAppliedJob视图,因此我无法编写代码以转到第三页。

def reviewAppliedJob(request):
    return HttpResponse('done....')

为此,我可以在HttpResponseRedirect('/reviewAppliedJob')中使用render代替applyJob(),但是它不会发送上下文数据。 Django允许使用 render(),消息框架,URL参数或会话发送上下文。但是由于我有大量数据,所以我不知道该使用哪一个数据,并且将无法正常工作。

有效且安全地完成此任务的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我建议您改用sessions。无需编写三个单独的视图,您可以编写一个。用户填充数据后,将它们临时保存在带有阶段密钥的会话密钥中。这样,在处理视图时,您可以访问用户的数据和阶段。