Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为DJANGO中的特殊字符创建验证程序?_Python_Django - Fatal编程技术网

Python 如何为DJANGO中的特殊字符创建验证程序?

Python 如何为DJANGO中的特殊字符创建验证程序?,python,django,Python,Django,我的网站是活的,但它有一个问题。每当有人在用户名中使用特殊字符注册时,服务器就会给出一个错误(对于整个站点),因为slug无法显示特殊字符,例如@,-,但django用户模型允许用户使用特殊字符注册。是否有一种方法可以在我的注册表单中插入验证程序错误 下面是我的表单.py from django.contrib.auth.models import User from django import forms from captcha.fields import CaptchaField cla

我的网站是活的,但它有一个问题。每当有人在用户名中使用特殊字符注册时,服务器就会给出一个错误(对于整个站点),因为slug无法显示特殊字符,例如@,-,但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

类注册表单视图(视图): form_class=注册表单 模板名称='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})

如果您想验证只接受数字或字母进行登录,对吗

你可以这样做:

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

如果您想验证只接受数字或字母进行登录,对吗

你可以这样做:

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
你可以用这个


你可以用这个

非常感谢:)非常感谢:)非常感谢:)谢谢你,小朋友,它对我不起作用,但它引导我走向正确的方向:)。祝你有一个愉快的一天。谢谢你,小朋友。这对我来说并不管用,但它引导我走向正确的方向:)。祝您今天过得愉快。