【问题标题】:How to create a validator for special characters in DJANGO?如何在 DJANGO 中为特殊字符创建验证器?
【发布时间】: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})

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    你可以这样做:

    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
    

    【讨论】:

      【解决方案2】:
      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
      

      你可以用这个

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 2012-05-29
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多