【发布时间】:2019-03-14 09:31:50
【问题描述】:
我的网站已上线,但存在问题。每当有人在其用户名中使用特殊字符进行注册时,服务器就会给出错误(针对整个站点),因为 slug 无法显示特殊字符,例如 @,-,|但是 django 用户模型允许用户使用特殊字符进行注册。有没有办法可以在我的注册表单中输入验证器错误。
下面是我的forms.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= 注册表格 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})
【问题讨论】: