英文:
Sending email after Login Django Allauth
问题
有没有办法在使用Django Allauth时实现登录后发送电子邮件?例如,每当有人登录到我的帐户时,我会自动收到一封电子邮件。
英文:
I’m new using Django Allauth, is there a way I can implement sending email after login? For example; every time someone logged into my account I will receive an email automatically.
答案1
得分: 0
你可以覆盖登录表单并在其中添加任何你想要的内容。查看这里。例如,你可以添加代码来使用Django的email功能发送电子邮件。
自定义登录表单可能位于accounts
应用程序中。在该目录中,你可以添加一个名为forms.py的文件,其中包含以下内容,它将覆盖(实际上不是覆盖,而是添加到)allauth的登录表单。
# forms.py
from django import forms
from django.core.mail import send_mail
from allauth.account.forms import LoginForm
class MyCustomLoginForm(LoginForm):
def login(self, *args, **kwargs):
# 在此处,你可以添加其他处理,每当有人使用allauth登录时,都会触发这些处理,最终会发送你想要的消息:
# ...
send_mail(
"主题",
"这是消息。",
"from@example.com",
["to@example.com"],
fail_silently=False,
)
# 你必须返回原始结果。
return super(MyCustomLoginForm, self).login(*args, **kwargs)
确保在settings.py中添加以下内容,以便Django知道使用这个自定义登录表单而不是allauth的表单(尽管你实际上将使用allauth的登录表单,只是添加了额外的内容):
# settings.py
ACCOUNT_FORMS = {'login': 'accounts.forms.MyCustomLoginForm'}
还要了解,根据你使用的电子邮件服务器(例如,使用Zoho时),你可能需要在settings.py中进行其他更改,需要遵循Zoho Django配置以使其正常工作。
你不应该需要修改views.py,因为所有处理都在覆盖的表单中完成。
**注意:**尽管这个方法应该能够工作,但我还没有时间测试它!
英文:
Answer:
You can override the login form and add whatever you want there. Checkout this. For example you can add code to send you email using django's email functionality.
The custom login form will probably be in the accounts
app. Within this directory you can add a forms.py with the following, which will overrride (well, not really override, rather, add to) allauth's login form.
# forms.py
from django import forms
from django.core.mail import send_mail
from allauth.account.forms import LoginForm
class MyCustomLoginForm(LoginForm):
def login(self, *args, **kwargs):
# HERE is where you would add additional processing whenever someone logs in
# using allauth, ending with the actual sending of the message you want:
# ...
send_mail(
"Subject here",
"Here is the message.",
"from@example.com",
["to@example.com"],
fail_silently=False,
)
# You must return the original result.
return super(MyCustomLoginForm, self).login(*args, **kwargs)
Make sure to add the following to settings.py so that django knows to use this custom login form instead of the one from allauth (even though you will actually be using allauth's login form, just with extra stuff added):
# settings.py
ACCOUNT_FORMS = {'login': 'accounts.forms.MyCustomLoginForm'}
Also understand that you will probably be making other changes in settings.py depending on which email server you are using (for example, with Zoho you'd need to do follow Zoho Django Configuration in your settings to get it to work.
You shouldn't need to mess with views.py as all the processing is done in the overridden form.
NOTE: Although this should work, I have not had time to test it!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论