我的网站已经启用,但是有问题。每当有人用用户名中的特殊字符进行注册时,服务器就会给出错误(针对整个站点),因为该条无法显示特殊字符,例如@,-,|但是django用户模型允许用户使用特殊字符进行注册。有什么办法可以在注册表单中引发验证器错误。
下面是我的表格。py
from django.contrib.auth.models import User
from django import forms
from captcha.fields import CaptchaField
class SignUpForm(forms.ModelForm):
captcha = CaptchaField()
password = forms.CharField(max_length= 15, widget=forms.PasswordInput)
def clean_username(self):
data = self.cleaned_data['username']
if not data.islower():
raise forms.ValidationError("Usernames should be in lowercase")
return data
class Meta:
model = User
help_texts = {
'username': 'Required. Please only use lower-case alphabets and
numbers.',
}
fields = ['username', 'email', 'password']
views.py
SignUpFormView(View)类: form_class = SignUpForm template_name ='home / signup.html'
#if there is no sign up yet
def get(self,request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
#if going to sig up
def post(self,request):
form = self.form_class(request.POST)
if form.is_valid():
#it takes information but does save it
user = form.save(commit = False)
#cleaned normalized data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
#returns if it is all correct
user = authenticate(username = username, password = password)
if user is not None:
if user.is_active:
login(request, user)
return redirect("userprofile:newprofile")
return render(request, self.template_name, {'form': form})
答案 0 :(得分:0)
如果了解,您想验证数字或字母只接受登录吗?
您可以这样做:
def validate_digits_letters(word):
for char in word:
if not char.isdigit() and not char.isalpha():
return False
return True
def clean_username(self):
data = self.cleaned_data['username']
if not data.islower():
raise forms.ValidationError("Usernames should be in lowercase")
if not validate_digits_letters(data):
raise forms.ValidationError("Usernames contains characters that are not numbers nor letters")
return data
答案 1 :(得分:0)
def clean_username(self):
data = self.cleaned_data['username']
if not data.islower():
raise forms.ValidationError("Usernames should be in lowercase")
if '@' in data or '-' in data or '|' in data:
raise forms.ValidationError("Usernames should not have special characters.")
return data
您可以使用此