Django 会话表单(临时保存表单)

Posted

技术标签:

【中文标题】Django 会话表单(临时保存表单)【英文标题】:Django Session Form (save form temporarily) 【发布时间】:2021-12-21 20:42:15 【问题描述】:

我已经创建了一个审核表单页面。所有用户都可以填写表单,但只有登录用户才能提交表单。如果用户没有登录,他们将被重定向到登录页面。登录后,他们将被重定向到个人资料页面。

所以流程会是这样的: 用户填写表单 > 点击提交 > 重定向到登录页面 > 用户登录并重定向到个人资料页面(同时自动保存他们填写的表单)

我希望他们登录后自动保存他们填写的表格。该怎么做?

我的想法是创建一个临时保存表单的会话,然后在他们登录后保存到数据库。但是我很困惑如何编写代码

谁能解释一下 django 会话是什么样的?以及如何编写代码来处理这个问题?

【问题讨论】:

【参考方案1】:
You can try something like,

1 User fills out the form and hits submit

2 in the POST view where you handle the form, use the "**is_authenticated**" function and, 
    a)if the user is authenticated you handle the form as usual...
    b)else set the contents of the form into a session variable in the views and redirect to the login page like,

request.session['review_body'] = request.post.get(the_form_body_field)

3 as per what you've said, after login it goes to profile page and form is submitted...
    a)so in views where you serve the profile page, check if the session variable containing form data's exist and has values
    b)if yes, directly save the contents from your views and clear the session data

【讨论】:

对于数字 3,我使用 django-allauth 进行身份验证。所以我有两个选择,覆盖 django-allauth 的登录视图,并创建 django 信号。哪个更好?

以上是关于Django 会话表单(临时保存表单)的主要内容,如果未能解决你的问题,请参考以下文章

需要澄清使用 Django 1.4 表单向导,特别是预填充和保存

如何使用 javascript 而不是 Django 会话将表单数据(Django 表单)存储到浏览器的本地存储?

Django 表单验证、clean() 和文件上传

从 django 表单获取会话值

Django - CreateView 不使用嵌套表单集保存表单

不使用 django 表单如何验证和保存表单数据