2015-04-28 46 views
1

使用Django 1.8模型EmailField是這樣的...的Django 1.8 EmailField現在接受無效的電子郵件地址

email = models.EmailField(verbose_name='email address', max_length=254, unique=True, db_index=True) 

...允許輸入無效的電子郵件。例如,下面的代碼創建的時候應該出錯的有效用戶...

用戶(電子郵件=「number_six @卡布裏卡」,密碼=「XYZ」)

但是,如果我在測試驗證Django的它正確地抓住了它......

從django.core.validators導入validate_email validate_email( 「number_six @卡布裏卡」)

我收到了正確的Enter a valid email address.迴應。

那麼最新情況如何? EmailFieldvalidate_email不使用相同的正則表達式嗎?爲什麼EmailField接受無效的電子郵件地址validate_email沒有?

+0

EmailField確實使用validate_email方法。也許當你試圖保存對象時調用它? –

+0

@IonutHulub上面是在Shell中直接測試的,其中EmailField允許,而validate_email不允許。對我來說,這裏有一些奇怪的事情發生。 – Prometheus

+0

當您將對象保存到數據庫時,可能會調用驗證器。試試'email.save()'看看是否會拋出驗證錯誤。 –

回答

2

這些不是無效的電子郵件地址,瀏覽器也接受那些類型電子郵件的輸入。

[email protected]例如是一個有效的電子郵件地址。

本地域名不需要TLD,這就是爲什麼。

編輯:雖然這些是有效的電子郵件地址,但Django不接受它們。 EmailField確實使用驗證程序validate_email

您的問題是,模型實例驗證必須手動運行,例如使用full_clean方法。有關更多信息,請參閱https://docs.djangoproject.com/en/1.8/ref/models/instances/#validating-objects

+0

那麼爲什麼EmailField接受validate_email不存在的無效電子郵件地址? – Prometheus

+0

@OrbiterFleet它沒有。當實例化一個對象時驗證程序沒有運行,然後需要手動運行 – aumo

+0

乾淨的方法沒有被調用.save()自動? – Prometheus

相關問題