生成随机字符串以及发送电子邮件时使用时发生错误

时间:2019-10-18 20:30:44

标签: python django

我在我的api中编写了一个端点,用户可以在其中重置密码。我使用python库smtp向用户发送带有代码的电子邮件。这段代码是一个简单的字符串。

我随机生成此字符串,并将其作为电子邮件的内容发送。

但是,当我向端点发送请求时,错误:

AttributeError:“ NoneType”对象没有属性“ encode”     发生。

这是我的端点代码:

code = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8))
content = 'Subject: {}\n\n{}'.format('Your code to reset your password:', code)
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login(os.environ.get('email'), os.environ.get('password'))
mail.sendmail(os.environ.get('email'), user.email, content)
mail.close()
hashedReset = make_password(code)
user.resetCode = hashedReset
user.save()
return JsonResponse({'message': 'An email has successfully been sent to the email paired with this account.'}, status=200)

models.py:

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    resetCode = models.TextField(blank=True)

    def __str__(self):
        return self.username

当我打印 code 变量时,将显示一个随机字符串,因此这不是问题。

有人知道这个问题是什么吗?谢谢。

1 个答案:

答案 0 :(得分:0)

取决于所使用的Python版本,请检查您的User模型对象,并确保它具有一个__unicode__方法,该方法返回除None之外的其他值。如果您使用的是Python 3,这是将您的对象变成字符串表示形式的方式(在Python 2中,该字符串曾经是__str__,因此请确保此处是字符串值。