Python 在django中将表单对象传递给会话变量
目前,我正在django项目中制作一个电子邮件确认系统,我的系统如下: 当新用户创建帐户时,将为该帐户创建随机生成的代码。然后,用户将被重定向到确认页面,在该页面中,他们将在收到的电子邮件中输入为他们生成的代码。我的问题是,当我尝试将来自注册的form对象放入会话变量中以在确认页面上使用(以便将表单保存到数据库)时,我得到一个错误,即RegistrationForm对象(在forms.py中创建)不可JSON序列化。任何帮助都将不胜感激,我觉得这是一个简单的解决办法Python 在django中将表单对象传递给会话变量,python,django,authentication,Python,Django,Authentication,目前,我正在django项目中制作一个电子邮件确认系统,我的系统如下: 当新用户创建帐户时,将为该帐户创建随机生成的代码。然后,用户将被重定向到确认页面,在该页面中,他们将在收到的电子邮件中输入为他们生成的代码。我的问题是,当我尝试将来自注册的form对象放入会话变量中以在确认页面上使用(以便将表单保存到数据库)时,我得到一个错误,即RegistrationForm对象(在forms.py中创建)不可JSON序列化。任何帮助都将不胜感激,我觉得这是一个简单的解决办法 # forms.py: fr
# forms.py:
from django import forms
from django.contrib.auth.forms import UserCreationForm
class RegistrationForm(UserCreationForm):
email = forms.EmailField(max_length=60, help_text="Required add a valid email address.")
class Meta:
model = Account
fields = ("email", "username", "restaurant_name", "password1", "password2")
我知道我需要某种序列化程序类,但我不知道如何在这种情况下创建或应用它。提前感谢:)
# views.py
def registration(request):
context = {}
if request.POST:
form = RegistrationForm(request.POST)
if form.is_valid():
email = form.cleaned_data.get("email")
# setting all the necessary variables for the session variable
request.session["account_data"] = {
"email": form.cleaned_data.get("email"),
"code": generate_account_code(),
"form": form,
}
# confirm is the name of the view which is meant to take in the confirmation code
return redirect("confirm")
else:
context["registration_form"] = form
else:
form = RegistrationForm()
context["registration_form"] = form
return render(request, "account/create_account.html", context)
def confirm(request):
context= {}
print(request.session["account_data"]["code"])
if request.method == "POST":
form = ConfirmForm(request.POST)
if form.is_valid():
form_code = form.cleaned_data.get("code")
if request.session["account_data"]["code"] == form_code:
account_data = request.session.get("account_data")
account_data["form"].save()
account = authenticate(request, email=account_data["email"], password=account_data["password"])
Account.objects.filter(email=email).update(is_active=True)
login(request, account)
return redirect("dashboard")
else:
context["form"] = ConfirmForm()
else:
context["form"] = ConfirmForm(request.POST)
else:
context["form"] = ConfirmForm()
return render(request, "account/confirm.html", context)