簡體   English   中英

如何將 validate_email 包包含到 django UserCreationForm 中?

[英]How to include validate_email package into django UserCreationForm?

我從 PyPI(鏈接)下載了一個電子郵件驗證器包,並使用

pip install validate email 

pip install py3dns

(因為我的 python 是 3.6.7 版)到我的 django 項目中。

問題是我無法讓validate_email函數在我的 django 項目上工作,所以我想知道我應該在我的 django 的forms.pyviews.py上寫什么代碼(還沒有使用models.py )。

請告訴我我做錯了什么以及應該對forms.py當前代碼進行哪些更改。

包括我

from django.core.validators import validate_email

在看到forms.py下面,試圖驗證任何用戶輸入的電子郵件,但它似乎validate_email從原理不同validate_emailfrom validate_email import validate_email

我需要的驗證來自 PyPI,因為它在驗證中更准確(例如可以檢查電子郵件是否存在),而validate_email表單 django.validators 只檢查無效格式,僅此而已。

/* forms.py */
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.core.validators import validate_email
from validate_email import validate_email


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    phone_number = forms.IntegerField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_email(self):
        email_passed = self.cleaned_data.get("email")
        email_req = "yourdomain.com"
        if not email_req in email_passed:
            raise forms.ValidationError("Invalid email format")
        return email

/* views.py */

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            phone_number = form.cleaned_data['phone']
            # do something with phone number??
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})

我希望輸出通過使用 get 方法獲取電子郵件並使用 validate_email 進行驗證來驗證來自 django 表單的電子郵件字段的電子郵件。 例如,如果輸入的電子郵件是“ifewheieuiower34@gmail.com”,這是一個不存在的電子郵件,則表單應引發錯誤,指出該電子郵件不存在。

您沒有在 clean 方法中從包中調用validate_email函數。 您可以像這樣在clean_email方法中調用它

def clean_email(self):
    email = self.cleaned_data.get("email")
    if not validate_email(email):
        raise forms.ValidationError("Invalid email")
    return email

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM