Хочу сделать подтверждение регистрации через почту. Приложение пишу на языке Python c помощью фреймворка Flask.
Модель пользователей:
class User(db.Model):
confirmed = db.Column(db.Boolean)
Здесь поле confirmed отвечает за подтверждение о регистрации.
Также есть три функции для:
# генерации зашифрованного токена
def generate_confirmation_token(email):
serializer = URLSafeTimedSerializer(SECRET_KEY)
return serializer.dumps(email, salt=SECURITY_PASSWORD_SALT)
# возвращение токена
def confirm_token(token, expiration=3600):
serializer = URLSafeTimedSerializer(SECRET_KEY)
try:
email = serializer.loads(
token,
salt=SECURITY_PASSWORD_SALT,
max_age=expiration
)
except:
return False
return email
# функции отправка письма
def send_email(to, subject, template):
msg = Message(
subject,
recipients=[to],
html=template,
sender=FLASK_MAIL_SENDER
)
mail.send(msg)
Также есть вьюшки:
# вьюшка регистрации
@app.route('/register', methods=['GET', 'POST'])
def register():
title = 'Регистрация'
form = RegisterForm()
if form.validate_on_submit():
user_add = User(form.nickname.data,
form.email.data, form.password.data, confirmed=False)
db.session.add(user_add)
db.session.commit()
subject = 'Подтвердите свой email'
token = generate_confirmation_token(user.email)
confirm_url = url_for('user.confirm_email', token=token, external=True)
html = render_template('email/confirm', confirm_url=confirm_url)
send_email(user.email, subject, html)
login_user(user_add)
flash(u'Письмо с подтверждением отправлено по электронной почте', 'success')
return redirect(url_for('user', nickname=g.user.nickname))
return render_template('user/register.html', title=title, form=form)
# вьюшка подтверждения регистрации
@app.route('/confirm/<token>')
def confirm_email(token):
global email
try:
email = confirm_token(token)
except:
flash('Ссылка на проверку email неверная или устарела.', 'danger')
abort(404)
user = User.query.filter_by(email=email).first_or_404()
if user.confirmed:
flash('Учётная запись уже подтверждена. Пожалуйста введите логин.', 'success')
else:
user.confirmed = True
db.session.add(user)
db.session.commit()
return redirect(url_for('index'))
В итоге новый пользователь регистрируется, и debugger возвращает ошибку:
AttributeError: 'function' object has no attribute 'email'
Как мне от неё избавиться? В чём моя ошибка?