/signup/ 'in <string>' 处的 Django TypeError 需要字符串作为左操作数,而不是列表
Django TypeError at /signup/ 'in <string>' requires string as left operand, not list
我有一个注册表单,用于验证电子邮件字段是否包含 gmail,如果不包含则给出错误。
forms.py
def clean_email(self):
submitted_data = self.cleaned_data['email']
if '@gmail.com' not in submitted_data:
raise forms.ValidationError('You must register using a gmail address')
views.py
class SignUpView(View):
form_class = SignUpForm
template_name = 'user/register.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False # Deactivate account till it is confirmed
user.save()
current_site = get_current_site(request)
subject = 'Activate Your Account'
message = render_to_string('user/account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
return redirect('confirm_registration')
return render(request, self.template_name, {'form': form})
我想添加一些其他的 'trusted emails' 这样表单将允许用户注册,例如:@yahoo.com、@outlook.com 但我无法添加列表或元组,因为我得到一个错误:
TypeError at /signup/
'in <string>' requires string as left operand, not tuple
问题
如何创建受信任的电子邮件域列表,而不是“@gmail.com”放置电子邮件域列表?
从错误来看,您似乎正在尝试执行以下操作:
if ['a', 'b'] in 'string'
?我相信 in
只能检查左侧的单个项目是否在右侧的迭代器中。
因此,要使其正常工作,您必须在 in
的左侧放置一个项目,而不是一个列表。
你试过这样的东西吗?
if not any(email in submitted_data for email in ['@gmail.com', '@otheremail.com']):
raise YourError
您可以创建一个 list
受信任的电子邮件服务并检查您的 submitted_data
即 email
在您的情况下包含任何电子邮件服务。你可以试试这个。
def clean_email(self):
submitted_data = self.cleaned_data['email']
trusted_email_services = ["@gmail.com", "@yahoo.com", "@outlook.com"]
if not any(email_service in submitted_data for email_service in trusted_email_services)
raise forms.ValidationError('You must register using a gmail or yahoo or outlook address')
我有一个注册表单,用于验证电子邮件字段是否包含 gmail,如果不包含则给出错误。
forms.py
def clean_email(self):
submitted_data = self.cleaned_data['email']
if '@gmail.com' not in submitted_data:
raise forms.ValidationError('You must register using a gmail address')
views.py
class SignUpView(View):
form_class = SignUpForm
template_name = 'user/register.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False # Deactivate account till it is confirmed
user.save()
current_site = get_current_site(request)
subject = 'Activate Your Account'
message = render_to_string('user/account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
return redirect('confirm_registration')
return render(request, self.template_name, {'form': form})
我想添加一些其他的 'trusted emails' 这样表单将允许用户注册,例如:@yahoo.com、@outlook.com 但我无法添加列表或元组,因为我得到一个错误:
TypeError at /signup/
'in <string>' requires string as left operand, not tuple
问题 如何创建受信任的电子邮件域列表,而不是“@gmail.com”放置电子邮件域列表?
从错误来看,您似乎正在尝试执行以下操作:
if ['a', 'b'] in 'string'
?我相信 in
只能检查左侧的单个项目是否在右侧的迭代器中。
因此,要使其正常工作,您必须在 in
的左侧放置一个项目,而不是一个列表。
你试过这样的东西吗?
if not any(email in submitted_data for email in ['@gmail.com', '@otheremail.com']):
raise YourError
您可以创建一个 list
受信任的电子邮件服务并检查您的 submitted_data
即 email
在您的情况下包含任何电子邮件服务。你可以试试这个。
def clean_email(self):
submitted_data = self.cleaned_data['email']
trusted_email_services = ["@gmail.com", "@yahoo.com", "@outlook.com"]
if not any(email_service in submitted_data for email_service in trusted_email_services)
raise forms.ValidationError('You must register using a gmail or yahoo or outlook address')