我正在使用 django-formtools 将长表格分成几部分。这工作正常。但是,我希望用户能够开始填写表单,直到我们说第 5 步(共 9 步),然后注销并再次登录,然后从第 5 步开始继续填写表单。
我可以使用 cookie 执行此操作,但是,如果用户 A 开始填写表单然后注销然后用户 B 登录,如果用户 B 选择继续填写表单,则用户 B 可以看到用户 A 的数据。如果用户 A 和 B 使用相同的计算机和 Web 浏览器,就会发生这种情况。当然,这不可能发生。
如果我使用会话而不是 cookie,那么当用户注销时,将无法从第 5 步开始继续填写表单,因为会话已刷新并且数据已删除。所以我想这些会议在这里对我没有帮助。
为了继续从第 5 步开始填写表格,我重写了以下 get 方法django-formtools.WizardView
:
def get(self, request, *args, **kwargs):
""" To allow resume editing of a session storaged submissions """
if self.continue_fill == True:
try:
return self.render(self.get_form())
except Exception as e:
print(e)
return super().get(request, *args, **kwargs)
else:
return super().get(request, *args, **kwargs)
#---
self.continue_fill
设置urls.py
为:
urlpatterns = [
path(
'new/',
views.SubmissionsWizardView.as_view(),
name='submission_new'
),
path(
'resume/',
views.SubmissionsWizardView.as_view(continue_fill=True),
name='submission_resume',
),
]
所以我的问题是:
1.- 是否可以将 cookie 与 Django 中的单个用户相关联?
2.- 在我的情况下,用户 A 和 B 可以看到他们的数据,因为我在 PC 上使用同一台 PC、相同的 Web 浏览器和相同的登录用户,因为我仍在开发网站。但一般来说,用户 A 在 PC 中使用用户 A 的帐户的 cookie 是否与用户 B 在同一台 PC 中使用用户 B 的帐户以及当然使用相同的 Web 浏览器的 cookie 不同?一般而言,如何在 Web 浏览器中为不同用户分离 cookie?
3.- 是否有可能使用会话进行这项工作(注销/登录继续填充)?
4.- 如果我想允许用户在不同的填写步骤中拥有多个表单实例怎么办?django-formtools 支持这个吗?
5.- 我想我可以创建一个表来临时存储表单中的数据并将行与用户相关联,然后为表单中的每个步骤更新行或覆盖注销方法以确保 cookie/会话数据存储在数据库中。这将允许保存多个用户可以继续编辑的表单,但这是很多工作。有更简单的选择吗?