Python 如何在Django 2.0中为小写用户创建验证器?
我的网站已启动并运行。然而,愚蠢的我并没有在验证器中检查用户和用户名是否只能小写(我只意识到DJANGO允许大写的用户和用户名)。尽管如此,我还是提出了一个警告,但用户通常忽略了在他们的注册表单中仍然使用大写字母或其他大写字母。然后我遇到了slug无法工作的问题,此后我不得不手动更改它们的用户名。我不想改变鼻涕虫的行为,相反,我可以请求别人帮助我改变观点吗?我也尝试过.lower().format(),但没有成功。我在验证器方面很弱 forms.pyPython 如何在Django 2.0中为小写用户创建验证器?,python,django,Python,Django,我的网站已启动并运行。然而,愚蠢的我并没有在验证器中检查用户和用户名是否只能小写(我只意识到DJANGO允许大写的用户和用户名)。尽管如此,我还是提出了一个警告,但用户通常忽略了在他们的注册表单中仍然使用大写字母或其他大写字母。然后我遇到了slug无法工作的问题,此后我不得不手动更改它们的用户名。我不想改变鼻涕虫的行为,相反,我可以请求别人帮助我改变观点吗?我也尝试过.lower().format(),但没有成功。我在验证器方面很弱 forms.py from django.contrib.au
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)
class Meta:
model = User
fields = ['username', 'email', 'password']
Views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from django.views import generic
from django.views.generic import View
from home.forms import SignUpForm
class 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})
您可以在
注册表单中添加验证:
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
fields = ['username', 'email', 'password']
来自django.contrib.auth.models导入用户
来自django导入表单
从captcha.fields导入CaptchaField
班级报名表(forms.ModelForm):
验证码=验证码字段()
密码=forms.CharField(最大长度=15,小部件=forms.PasswordInput)
def clean_用户名(自我):
数据=自清理的数据['username']
如果不是data.islower():
raise forms.ValidationError(“用户名应为小写”)
返回数据
类元:
模型=用户
字段=[“用户名”、“电子邮件”、“密码”]
因此,如果data.islower()
检查失败(用户名
包含大写字符),它将引发验证错误
,因此表单无效
请注意,islower()
只检查基于大小写的字符,因此如果字符串包含数字,则仍将成功。因此,您可能需要对支票进行微调。或按照以下文件中的规定:
如果字符串中所有大小写字符都是小写和小写,则返回True
至少有一个大小写字符,False
否则
另一种方法可能是将数据转换为小写,这样输入
'FooBar'
的用户将获得用户名FooBar
,尽管这可能会导致用户混淆他们选择的用户名不是他们获得的用户名。更改用户名=表单。清除的\u数据['username']
tousername=form.cleaned_data['username'].lower()
perfect Willem你是个救生员:)django不在乎用户名的大小写,用户可以通过在下方或上方输入用户名登录。例如用户名
,用户名
,用户名
,用户名
都是相同的,用户登录时不会出现任何问题