如何自定义Django Rest API密码重置邮件中的完整URL
django-rest-passwordreset 自定义密码重置邮件完整URL方案
你不需要修改第三方库源码,以下两种方案都可以实现拼接带https和域名的完整可访问链接,按需选择即可。
方案1:通过内置信号自定义邮件逻辑(灵活性最高,推荐生产环境使用)
这个方案可以完全自定义邮件标题、内容、发件人信息,不受库默认逻辑限制,适配多环境部署场景。
- 在你项目中已注册的用户相关App(比如命名为
users)下新建signals.py文件,写入信号处理逻辑:from django.dispatch import receiver from django_rest_passwordreset.signals import reset_password_token_created from django.core.mail import send_mail from django.conf import settings @receiver(reset_password_token_created) def send_custom_reset_password_email(sender, instance, reset_password_token, *args, **kwargs): # 直接拼接符合你要求的完整重置URL full_reset_url = f"https://mywebsite.com/password-reset/?token={reset_password_token.key}" # 自定义邮件正文 mail_content = f"""请点击下方链接完成账户密码重置:
{full_reset_url}
如果不是你本人发起的密码重置请求,直接忽略本邮件即可。
链接有效期为24小时。
"""
send_mail( subject="账户密码重置", message=mail_content, from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[reset_password_token.user.email], fail_silently=False, ) ```
- 修改对应App的
apps.py文件,在ready方法中导入信号文件,确保信号能正常生效:from django.apps import AppConfig class UsersConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "users" def ready(self): import users.signals - 在项目
settings.py中添加配置,关闭库默认的邮件发送逻辑,避免用户收到重复邮件:DJANGO_REST_PASSWORDRESET_SEND_EMAIL = False
方案2:通过全局配置指定URL前缀(配置简单,适合固定域名场景)
如果不需要自定义邮件内容,只是想补全URL的协议和域名,可以直接在settings.py中添加以下配置项,库会自动拼接生成完整链接:
# 配置站点域名 DJANGO_REST_PASSWORDRESET_DOMAIN = "mywebsite.com" # 配置使用HTTPS协议 DJANGO_REST_PASSWORDRESET_PROTOCOL = "https" # 如果你的重置路径和默认不一致,再加这行指定路径,当前场景可以不加 # DJANGO_REST_PASSWORDRESET_RESET_PASSWORD_URL_PATH = "/password-reset/"
配置完成后重启服务,默认发送的邮件里就会自动生成你需要的完整URL格式。
注意事项
- 两种方案二选一即可,同时使用会导致用户收到两封重置邮件
- 生产环境建议搭配环境变量存储域名信息,方便测试、生产环境自动切换
- 确保配置的域名和前端实际部署的密码重置页路由完全一致,避免链接无法访问
内容的提问来源于stack exchange,提问作者user13450139
相关产品推荐
相关产品推荐

