Flask 如果电子邮件未确认,如何重新发送信件?
我试图重新发送电子邮件给任何一个尚未确认他的帐户 型号.pyFlask 如果电子邮件未确认,如何重新发送信件?,flask,Flask,我试图重新发送电子邮件给任何一个尚未确认他的帐户 型号.py class Subscribers(Base): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(50)) confirmed = db.Column(db.Boolean(), default=False) def confirm(self, token): s = Serialize
class Subscribers(Base):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
confirmed = db.Column(db.Boolean(), default=False)
def confirm(self, token):
s = Serializer(app.config['SECRET_KEY'])
try:
data = s.loads(token)
except:
return False
if data.get('confirm') != self.id:
return False
self.confirmed = True
db.session.add(self)
return True
def generate_confirmation_token(self, expiration=3600):
s = Serializer(app.config['SECRET_KEY'], expiration)
return s.dumps({'confirm': self.id})
def get_token(self, expiration=1800):
s = Serializer(app.config['SECRET_KEY'], expiration)
return s.dumps({'email': self.id}).decode('utf-8')
@staticmethod
def verify_token(token):
s = Serializer(app.config['SECRET_KEY'])
try:
data = s.loads(token)
except:
return None
id = data.get('email')
if id:
return User.query.get(id)
return None
这是确认流程处理的功能:
@app.route('/send-confirmation/<email>/<token>')
def confirm(token,email):
subre = Subscribers.query.filter_by(email=email).first()
if subre.confirmed:
flash('Э.почта уже подтверждена.')
return redirect(url_for('index'))
if subre.confirm(token):
subre.confirmed = True
db.session.add(subre)
db.session.commit()
send_email(subre.email, 'Благодарим Вас за подписку на наш сайт', 'auth/subscribe/thanks', subre=subre, token=token)
flash('Вы подтвердили свою электронную почту, спасибо!')
else:
flash('Ссылка для подтверждения является недействительным или истек.')
return redirect(url_for('index'))
这里我得到一个错误,上面写着:
AttributeError:'unicode'对象没有属性“生成确认令牌”
我试图在模型中添加\uuuuuunicode\uuuuu
函数,但没有成功
请提供任何帮助。您正在尝试调用电子邮件上的generate\u confirmation\u token方法,但您应该使用订阅者实例:
@app.before_request
def resend_confirmation():
subscribers = Subscribers.query.filter_by(confirmed=False)
for sub in subscribers:
token = sub.generate_confirmation_token()
send_email(sub.email, 'Подтверждение по электронной почте было отправлено Вам по электронной почте.',
'auth/email/resend', email=email, token=token)
@app.before_request
def resend_confirmation():
subscribers = Subscribers.query.filter_by(confirmed=False)
for sub in subscribers:
token = sub.generate_confirmation_token()
send_email(sub.email, 'Подтверждение по электронной почте было отправлено Вам по электронной почте.',
'auth/email/resend', email=email, token=token)