django-views - 在表单和视图之间传递对象
问题描述
我在视图和表单之间传递对象并返回时遇到问题。
在第一种形式中,我使用电子邮件检查令牌(GET) - 如果没问题 - 你可以走得更远。如果没有 - 走开:D
视图.py:
def login(request):
try:
token = request.GET['token']
except:
return render(request,'error.html')
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/vote/')
else:
form = LoginForm(initial={'token': request.GET['token']})
return render(request,'login.html', context = {'form':form})
表格.py:
class LoginForm(forms.Form):
email = forms.EmailField(label='Email', max_length=254,widget=forms.TextInput(attrs={'class':'required'}))
token = forms.CharField(widget=forms.HiddenInput())
def clean(self):
cleaned_data = super().clean()
try:
voter = Person.objects.get(email__iexact=cleaned_data['email'],token__exact=cleaned_data['token'])
except Person.DoesNotExist:
raise ValidationError('Invalid email')
有用。
但现在我试着去投票表格。我想使用 voter 对象(在 LoginForm 中设置)。当然这是不同的形式,所以我必须通过它。我考虑过 session,但没有 request.session 形式。这是在视图中,但没有选民......或者是吗?
解决方案
和往常一样,当我被困了很多分钟时,我写了这个问题,几分钟后我得到了很好的解决方案,所以我想与你分享:
我将检查移入视图并使用 form.add_error。而且我不再需要令牌隐藏字段:
表格.py:
class LoginForm(forms.Form):
email = forms.EmailField(label='Email', max_length=254,widget=forms.TextInput(attrs={'class':'required'}))
视图.py:
def login(request):
try:
token = request.GET['token']
except:
return render(request,'error.html')
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
try:
voter = Person.objects.get(email__iexact=form.cleaned_data['email'],token__exact=token)
return HttpResponseRedirect('/vote/')
except Person.DoesNotExist:
form.add_error('email','Invalid email')
else:
form = LoginForm()
return render(request,'login.html', context = {'form':form})
现在我可以使用请求、会话等将选民传递到下一个表单:D
推荐阅读
- mysql - SSIS 作业失败,因为它连接到 MYSQL 连接
- wpf - 如何将当前节点对象传递给wpf中telerik RadtreeviewItem中的命令
- html - 仅当另一个元素没有子元素时,如何在Angular 7中显示一个元素
- visual-studio-code - 发布 VSCode 扩展后缺少 SVG 图标
- twilio - 即使升级后也无法从 twilio 向未经验证的用户发送 otp 短信
- amazon-web-services - 允许从特定账户的所有 EC2 实例访问 S3 存储桶
- ldap - 身份验证/授权提供商:为 1 天的项目选择哪一个?
- php - 如何使用php对数据库中的列求和
- r - 如何将字符串向量映射为函数的参数?
- mysql - MySQL 选择 id from to 并排除开始和结束 id