2017-11-02 15 views
1

誰かがDjangoの電子メールアドレスを検証する方法を説明できますか? 例として、電子メールが有効な大学の電子メールアドレスで、終端が.eduであるかどうかをチェックしたいと考えています。 どうすればいいですか?電子メールの検証を確認するDjango

答えて

0

あなたのニーズに合わせて正規表現を作成するか、標準的な表現を使用することもできます。

import re 

EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" 

# EMAIL_REGEX = r'\[email protected]\.edu' # If you only want to allow edu. 

class SignUpForm(forms.ModelForm): 
... 

    def clean_email(self): 
     email = self.cleaned_data.get('email') 

     if email and not re.match(EMAIL_REGEX, email): 
      raise forms.ValidationError('Invalid email format') 

     return email 

実際には、より良いアプローチは、(あなたが本当にあなたのカスタムフォーマットへの電子メールアドレスを制限する必要がある場合を除き)だろう自動的に同じことを保証する、@Alasdairが提案されているようEmailFieldを使用することです。

2

SignUp.emailフィールドがEmailFieldであると仮定すると、Djangoは有効なメールアドレスであることを確認します。あなたがする必要があるのは、それが.eduで終わることをチェックし、そうでない場合はValidationErrorにしてください。

class SignUpForm(forms.ModelForm): 
    class Meta: 
     model = SignUp 
     fields = ['full_name','email'] 

     def clean_email(self): 
      email = self.cleaned_data.get('email') 
      if not email.endswith('.edu'): 
       raise forms.ValidationError("Only .edu email addresses allowed") 
      return email 

バリデーターを作成してモデルフィールドに追加する方が良い場合は、このようにして、DjangoはあなたのSignUpFormを使用するとき、そしてDjangoの管理者のような他の場所でモデル検証を行うときにあなたのバリデータを実行します。

from django.core.exceptions import ValidationError 

def validate_edu_email_address(value): 
    if email.endswith('.edu'): 
     raise forms.ValidationError("Only .edu email addresses allowed") 

class SignUp(models.Model): 
    email = models.EmailField(validators=[validate_edu_email_address]) 
    ... 
関連する問題