Під час розробки веб-додатків на Flask із використанням SQLAlchemy для роботи з базою даних можуть виникати різноманітні помилки, які не завжди легко виявити та виправити. Одна з таких проблем – AttributeError: ‘NoneType’ object has no attribute ‘is_active’, яка зазвичай виникає при спробі створення нового облікового запису користувача.
Ця помилка пов’язана з тим, що в об’єкта користувача передається значення None, тобто об’єкт не існує. Пояснимо, як можна вирішити цю проблему.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from flask import Blueprint, render_template, request, flash, redirect, url_for from .models import User from werkzeug.security import generate_password_hash, check_password_hash from . import db from flask_login import login_user, login_required, logout_user, current_user @auth.route('/sign-up', methods=['GET', 'POST']) def sign_up(): if request.method == 'POST': email = request.form.get('email') username = request.form.get('username') password1 = request.form.get('password1') password2 = request.form.get('password2') user = User.query.filter_by(email=email).first() if user: flash('Користувач вже існує', category='error') elif len(email) < 4: flash('Неправильна електронна адреса', category='error') elif len(username) < 2: flash('Занадто коротке ім\'я користувача', category='error') elif password1 != password2: flash('Паролі не співпадають', category='error') elif len(password1) < 7: flash('Пароль занадто короткий', category='error') else: new_user = User(email=email, username=username, password=generate_password_hash(password1)) db.session.add(new_user) db.session.commit() login_user(new_user, remember=True) <!-- Виправлення: Використовуйте new_user замість user --> flash('Успішно', category='success') return redirect(url_for('views.index')) return render_template("sign_up.html", user=current_user) |
В даному коді виникла помилка через те, що при спробі авторизації нового користувача використовувався об’єкт user, який не існував. Для виправлення цієї проблеми замість user використовується новостворений об’єкт new_user, який був доданий до бази даних і успішно авторизований. Це дозволяє уникнути помилки AttributeError: ‘NoneType’ object has no attribute ‘is_active’.
Оскільки Flask є досить популярним фреймворком для створення веб-додатків на Python, розуміння та вирішення подібних помилок є важливими для розробників, які працюють з цим інструментарієм. Ця стаття допоможе вам вирішити конкретну проблему з обліковим записом користувача у Flask, а також зрозуміти, як працюють деякі основні компоненти фреймворку, такі як SQLAlchemy і Werkzeug.
Надіємося, що ця інформація буде корисною для вас у подальшій роботі з Flask!