如果用户未登录,请在Django中保存填充的表单数据?

时间:2018-02-10 14:43:29

标签: python django django-forms

我搜索Django-way做一些非典型的功能(我认为)。我的env是Django 2.0.2,PostgreSQL 9.6和Python 3.6.4。所以,我的模型和形式如下:

# ./app/models.py

from users.models import User # custom user model

class SubscribeModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=80)

# ./app/forms.py

class SubscribeForm(forms.Form):
    phone = forms.EmailField(label='Phone Number', max_length=100)

此外,我对此模型的看法如下:

# ./app/views.py

from django.contrib.auth.mixins import LoginRequiredMixin
from users.models import User

class SubscribeView(LoginRequiredMixin, View):

    login_url = '/login/'
    redirect_field_name = 'redirect_to'
    template_name = 'app/subscribe.html'
    form_class = SubscribeForm

    def post(self, request):
        user = get_object_or_404(User, id=request.user.id)
        form = self.form_class(request.POST, instance=user)

        if form.is_valid():
            form.save()
            return redirect('/')

        return render(request, self.template_name, {'client': user, 'form': form})

在保存表单后理解如何处理该逻辑会很棒:

  1. 匿名用户填写表单并点击Save;
  2. 他正在重定向到login页面(因为LoginRequiredMixin);
  3. 进入网站后,他填写的所有数据 - 自动保存到他的帐户。
  4.   

    我们在网上购物时可以看到这个功能:我们选择商品,添加到   我们的购物车,只有在以后,网站要求我们登录网站,如果我们不是(为了保存我们的订单)。

    我认为,我的问题解决了将数据保存到request.session并在登录后重新保存到数据库,但我不知道如何在我的代码上执行此操作并且这是正确的吗?我是Django的新手......但是!

1 个答案:

答案 0 :(得分:0)

实际上使用request.session存储数据而不将其保存到数据库是一种方法,如果你主要开发javascript AJAX frontent,你可以将它保存到localStoragesessionStorage。 。但是如果你用django渲染每个视图,那么你可以更好地使用request.session。考虑将对象的id存储在数组中的request.session中,然后根据需要使用它,记住将其分配给JSON(json.dumps(list of ids)),然后再将其分配给request.session