【问题标题】:Django sending context to multiple viewsDjango 将上下文发送到多个视图
【发布时间】:2020-03-24 07:42:30
【问题描述】:

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

  1. 首页:用户填写了一个大的工作申请表,并且该数据是 发送到第二页

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

  3. 第三页:用户支付金额(来自第二页)并且一旦支付,那么只有所有这些数据被保存到数据库中。

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

这是我的 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....')

为此,我可以在applyJob() 中使用HttpResponseRedirect('/reviewAppliedJob') 而不是render,但它不会发送我的上下文数据。 Django 允许使用 render()、消息框架、url 参数或会话 发送上下文。但是由于我有大量的数据,我不知道该使用哪一个并且可以完美地工作。

高效、安全地完成这项任务的最佳方法是什么?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 好的。据我所知,会话是存储数据的好方法。但我想知道在 Sessions 中存储大量数据是否是一种好的做法和安全性?
    • 嗯,会话存储在服务器端,所以我们可以说它是安全的;否则我们不会在会话中保留身份验证信息。对于数据大小,我建议您在 15 分钟后过期会话数据,(取决于提供多少信息),以免造成过多负载。如果您真的不想将所有数据存储在会话中,您可以为临时数据创建一个模型并将其存储为到期日期,然后您只需在会话中包含对象 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2012-01-30
    • 2013-04-07
    • 2018-01-11
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多