2017-08-16 58 views
0

在使用Django構建的網站註冊期間,是否有簡單的方法來強制使用唯一的電子郵件地址? 我見過一些「插件?」像HMAC,但它似乎有點太複雜,我試圖實現。在Django註冊期間強制使用唯一的電子郵件地址

此外,是否有可能只接受來自域名列表的註冊? (如只有來自「@ google.com」的電子郵件)

回答

1

我遇到了同樣的問題,並通過將AbstractUser類擴展到我自己的類MyUser並更改默認值來解決此問題。

然後,通過將此類MyUser作爲我所有用戶的默認模型類,我可以將此屬性(唯一電子郵件)應用於我的所有用戶在我的Web應用程序上。

創建應用程序myuser。有在models.py:

from django.contrib.auth.models import AbstractUser 

#create your own user class. 
class MyUser(AbstractUser): 
def __init__(self, *args, **kwargs): 
    self._meta.get_field('email').blank = False 
    self._meta.get_field('email')._unique = True 
    super(MyUser, self).__init__(*args, **kwargs) 

#Changed the defaults above. 
#Give any additional field you want to associate your user with. 

注:AbstractUser已經擁有所有你想要的用戶模型有基本字段。例如:用戶名,密碼,電子郵件等。檢查所有人here

,你會想要做的最後一件事是添加下面你setting.py

AUTH_USER_MODEL = 'myuser.MyUser' 

這將確保默認用戶與你的web應用程序相關聯的是擴展(修改)MyUser類。這將爲您提供django爲User提供的所有基本功能。

  1. 登錄
  2. 註銷
  3. 在你的意見:你可以得到用戶實例中:request.user

我想建議你可能需要一些額外的代碼(在形式.py和views.py)通過這種類創建用戶。我希望你能解決這個問題。這應該足以引導你朝着正確的方向前進。

也許一個圖書館會有所幫助,但既然你需要一個電子郵件域的認證,我認爲這應該會有訣竅。在我看來,你不能總是依靠第三方庫來實現其他功能。

最後,你問驗證用戶只能從像@ gmail.com或@ outlook.com域,在你的Django形式的清潔方法會做的伎倆一個簡單的檢查來了。我希望你知道如何處理Django表單。如果沒有,那麼你可以在官方文檔中瞭解它們。它們是Django的重要組成部分。

你可以利用這個邏輯檢查電子郵件:

email = self.cleaned_data['email'] 
email_source = email.split('@')[-1] 
#email_source will now have values like: gmail.com, outlook.com etc 
#you can now validate email_source now like: 
permitted_sources = ['gmail.com' , 'outlook.com' , ] 
if email_source in permitted_sources: 
    return cleaned_data 
else: 
    raise forms.ValidationError('Error Message') 
#Note: This logic should be kept in your clean method. 

我希望這將引導您。謝謝。

+0

現在,這是一個指導!非常感謝你!!將盡快工作。 – willer2k

相關問題