我有一个当前可以很好地工作的表单,除了用户可以在表单字段之一中输入他们想要的任何值。我想首先在用户实际提交表单之前,在用户按下“提交”按钮时检查该字段的值。
在views.py中,我认为最好的位置在哪里?
我的目标是检查用户输入的function PrintElem()
{
Popup($html);
}
function Popup(data)
{
var myWindow = window.open('', 'Receipt', 'height=400,width=600');
myWindow.document.write('<html><head><title>Receipt</title>');
/*optional stylesheet*/ //myWindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
myWindow.document.write('<style type="text/css"> *, html {margin:0;padding:0;} </style>');
myWindow.document.write('</head><body>');
myWindow.document.write(data);
myWindow.document.write('</body></html>');
myWindow.document.close(); // necessary for IE >= 10
myWindow.onload=function(){ // necessary if the div contain images
myWindow.focus(); // necessary for IE >= 10
myWindow.print();
myWindow.close();
};
}
值,并确保他们输入的值存在于customerTag
模型字段中。
对于我的CustomerTag
,我目前有:
views.py
def usersignup(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
email_subject = 'Activate Your Account'
message = render_to_string('activate_account.html', {
'user': user,
'domain': '127.0.0.1:8000',
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
'token': account_activation_token.make_token(user),
})
to_email = form.cleaned_data.get('email')
send_mail(email_subject,
message,
'example@example.com',
[to_email,],
fail_silently=False)
return render(request, 'confirm.html',)
else:
form = CustomUserCreationForm()
return render(request, 'signup.html', {'form': form})
我有:
forms.py
上面的代码有效,但是允许用户将他们喜欢的任何内容输入到class CustomUserCreationForm(UserCreationForm):
def __init__(self, *args, **kwargs):# for ensuring fields are not left empty
super(CustomUserCreationForm, self).__init__(*args, **kwargs)
self.fields['email'].required = True
self.fields['first_name'].required = True
self.fields['customerTag'].required = True
class Meta(UserCreationForm.Meta):
model = CustomUser
fields = ('username', 'first_name', 'last_name', 'email', 'customerTag',)
labels = {
'customerTag': ('Customer ID'),
}
help_texts = {
'customerTag': ('Please contact Support if you do not have your customer ID'),
}
中。我想我需要做些类似的事情:
customerTag
这是正确的方向吗?如果是这样,获得用户输入到表单中的值的最佳方法是什么?
我发现的其他一些帖子中使用的是javascript检查表单,如果可能的话,我宁愿使用python。
答案 0 :(得分:1)
您可以使用以下方法在视图中访问customerTag值:
customerTag = request.POST.get('customerTag')
,然后检查它是否存在于数据库中
# we retrieved customerTag in the code above sample so we pass it to filter params
match = CustomUser.objects.filter(customerTag=customerTag).exists()
# and then continue with the stuff u wanted
if match:
#submit form
但是如果您在用户点击提交表单之前在表单输入上进行ajax调用,则会为您的网站带来更好的用户体验