如果已經有實質性的答案,我已經搜索了很長時間,找不到任何有用的答案,我很抱歉。在Django中創建用戶和發送密碼重設
我有一個django項目,有不同級別的帳戶訪問權限。我有一組「經理」,我想讓他們管理用戶帳戶。
我希望管理員能夠爲用戶創建用戶帳戶對象。但是,我不希望他們必須處理創建密碼並將其發送給用戶(出於顯而易見的原因)。通過這種方式,管理員可以冒充用戶代表他們完成工作,用戶可以維護密碼控制和數據所有權。
這個想法是管理者創建賬戶,當賬戶被創建時,用戶將被髮送一個密碼重置表單(與django的開箱驗證相同),這將允許他們設置密碼。
我的代碼類似於以下(省略非必要東西)
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm
@manager_required
def manager_add_users(request):
add_user_form = manager_add_user_form(request.POST)
new_user_name = add_user_form.cleaned_data['user_name']
new_user_email = add_user_form.cleaned_data['user_email']
new_user = User.objects.create_user(
username = new_user_name,
email = new_user_email,
)
new_user.save()
set_password_form = PasswordResetForm({'email': new_user.email })
if set_password_form.is_valid():
print 'Reset Form Is Valid'
set_password_form.save(
request= request,
use_https=True,
from_email="[email protected]",
email_template_name='registration/password_reset_email.html')
的帳戶創建正確,一切都沒有錯誤運行。問題是,儘管表單有效(重置表單是有效的語句打印),但實際上並沒有發送重置表單。沒有表單錯誤。
然而,在測試的時候我初始化的形式與已經存在於系統中像這樣的地址:
set_password_form = PasswordResetForm({'email':'[email protected]'})
密碼重置形式發送沒有錯誤。因此,它只適用於系統中現有的用戶電子郵件地址,但儘管用戶已創建並調用了.save()方法,但它仍未捕獲它(用戶在創建時標記爲「活動」,因此它們應該是能夠找到)
我有點茫然。我可以想到幾種解決這個問題的方法,但這似乎是最直接的方式,我真的不完全確定它爲什麼不起作用。
是的,我可以發送消息。我使用的Django的後端郵件來進行測試:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
你還沒有提到任何關於你的電子郵件後端。 Django本身不發送任何電子郵件,你必須配置一個電子郵件服務器。運行測試時,它會替換一個虛擬後端。您是否設置了電子郵件服務器並確認您可以實際發送電子郵件? –
對不起。我使用django的後端。我想明確的是,當我提到成功地在某些測試用例中發送了郵件時,我配置了郵件服務器。我已更新問題以包含我的設置。 – rob
謝謝澄清。我之所以提到它,是因爲在沒有設置郵件服務器的情況下,測試可以正常工作,因爲Django的測試運行器替代了測試後端。 –