如何在Django的会话中存储表单输入?

时间:2017-01-06 23:04:31

标签: django django-registration django-sessions

谁可以帮我解决以下挑战?

我有一个用户可以注册的注册模板。然后将它们重定向到带有付款按钮的URL,并在成功付款时激活。在HTML模板中,我将用户名存储在付款按钮中的自定义字段中,该按钮用于稍后激活帐户。现在由于用户尚未激活/登录,我无法像{{user.username}}那样调用用户对象。因此,我想尝试会话来解决此问题,并在注册期间捕获用户名以检索此会话变量并将其放在我的自定义字段中的不同页面上。但是怎么样?我尝试使用request.session,但我不知道在哪里适合下面的文件,然后如何在html模板中调用此变量。

非常感谢任何建议或帮助!

这是我的 regbackend.py

class MyRegistrationView(RegistrationView):  
    form_class = UserProfileRegistrationForm
def register(self, form_class):
    user_package.username = form_class.cleaned_data['username']

这是我的 forms.py

class SignUpForm(forms.ModelForm):
class Meta:
    model = SignUp
    fields = ['username', 'email']

这是我的 registration.html

<form method="post" action=".">
{% csrf_token %}
{{ form.username|as_crispy_field }}
 <input class="btn btn-success" type="submit" value="{% trans 'Submit' %}" /></form>

最后是 HTML模板,用于在注册后使用付款按钮和自定义字段。

 <form action="some-url" method="post" target="_top">
 <input type="hidden" name="custom" value="{{ session.username? }}">
 </form>

我正在使用Django 1.9x和Django-registration-redux

1 个答案:

答案 0 :(得分:2)

这就是我如何让会话在另一个视图上使用它。

在您的注册表上:

def registration(request):
    initial={'username': request.session.get('username', None)}
    form = RegistrationForm(request.POST or None, initial=initial)
    if request.method == 'POST':
        if form.is_valid():
            request.session['username'] = form.cleaned_data['username']
            return HttpResponseRedirect(reverse('your_checkout_view'))
    return render(request, 'registration.html', {'form': form})

完成用户名字段并提交表单后,它会转到第二个视图,您可以在其中获取会话中存储的用户名。

就像这样

def your_checkout_view(request):
    username = request.session['username']
    ...

从那里,您可以获取存储的用户名并执行您必须执行的操作。