Ошибка ImportError: невозможно импортировать имя «url_decode» из «werkzeug.urls». ⇐ Python
Ошибка ImportError: невозможно импортировать имя «url_decode» из «werkzeug.urls».
Я создаю веб-приложение с помощью Flask. Я импортировал библиотеку flask-login для обработки входа пользователя. Но выдает ошибку ImportError.
Ниже приведена структура моих папок:
>flask_blog1 >флакблог >статический >шаблоны >__init__.py >forms.py >models.py >routes.py >экземпляр >site.db >венв >requirements.txt >run.py Мой run.py:
из приложения импорта flaskblog если __name__ == "__main__": app.run(отладка=Истина) Мой __init__.py:
из фляги импорта колбы из flask_sqlalchemy импортировать SQLAlchemy из flask_bcrypt импортировать Bcrypt из flask_login импортировать LoginManager приложение = Колба(__name__) app.config["SECRET_KEY"] = "5791628bb0b13ce0c676dfde280ba245" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db" БД = SQLAlchemy (приложение) bcrypt = Bcrypt (приложение) login_manager = LoginManager (приложение) из маршрутов импорта flaskblog Мой models.py:
из даты и времени импорта даты и времени # из базы данных импорта .extensions из базы данных импорта flaskblog, login_manager из flask_login импортировать UserMixin @login_manager.user_loader защита load_user (user_id): вернуть User.query.get(int(user_id)) класс User(db.Model, UserMixin): id = db.Column(db.Integer, Primary_key=True) имя пользователя = db.Column(db.String(20), unique=True, nullable=False) электронная почта = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default="default.jpg") пароль = db.Column(db.String(60), nullable=False) сообщения = db.relationship("Сообщение", backref="автор", lazy=True) защита __repr__(сам): return f"User('{self.username}', '{self.email}', '{self.image_file}')" сообщение класса (db.Model): id = db.Column(db.Integer, Primary_key=True) заголовок = db.Column(db.String(100), nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) содержимое = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) защита __repr__(сам): return f"Post('{self.title}', '{self.date_posted}')" Мой routes.py:
из фляги import render_template, flash, redirect, url_for из приложения импорта flaskblog, db, bcrypt из flaskblog.forms импортировать RegistrationForm, LoginForm из flaskblog.models импортировать пользователя, сообщение из flask_login импортировать login_user сообщения = [ { "author": "Ашутош Чапагайн", "title": "Сообщение в блоге 1", "content": "Содержимое первого сообщения", "date_posted": "1 октября 2023 г.", }, { "автор": "Эш Дхакал", "title": "Сообщение в блоге 2", "content": "Содержимое второго сообщения", "date_posted": "2 октября 2023 г.", }, ] @app.route("/") @app.route("/домой") защита дома(): return render_template("home.html", messages=posts) @app.route("/о") определение о(): return render_template("about.html", title="О программе") @app.route("/register", методы = ["GET", "POST"]) Защитный регистр(): форма = РегистрационнаяФорма() если form.validate_on_submit(): hashed_password = bcrypt.generate_password_hash(form.password.data).decode( "utf-8" ) пользователь = Пользователь( имя пользователя = form.username.data, адрес электронной почты = form.email.data, пароль = hashed_password ) db.session.add(пользователь) db.session.commit() flash(f"Ваша учетная запись создана! Теперь вы можете войти в систему!", "успех") вернуть перенаправление(url_for("логин")) return render_template("register.html", title="Регистрация", form=form) @app.route("/login", методы = ["GET", "POST"]) защита входа(): форма = Форма входа() если form.validate_on_submit(): пользователь = User.query.filter_by(email=form.email.data).first() if user и bcrypt.check_password_hash(user.password, form.password.data): login_user(пользователь, Remember=form.remember.data) вернуть перенаправление(url_for("домой")) еще: flash("Вход не удался. Пожалуйста, проверьте адрес электронной почты и пароль», «опасность») return render_template("login.html", title="Логин", form=form) Мой forms.py:
из flask_wtf импорта FlaskForm из wtforms импортируйте StringField, PasswordField, SubmitField, BooleanField из wtforms.validators импортировать DataRequired, Длина, Электронная почта, EqualTo, ValidationError из flaskblog.models импортировать пользователя Класс RegistrationForm(FlaskForm): имя пользователя = StringField( «Имя пользователя», валидаторы=[DataRequired(), Длина(мин=2, макс=20)] ) электронная почта = StringField("Электронная почта", validators=[DataRequired(), Email()]) пароль = PasswordField("Пароль", validators=[DataRequired()]) подтверждение_пароля = Поле Пароля( «Подтвердить пароль», validators=[DataRequired(), EqualTo(»пароль»)] ) submit = SubmitField("Регистрация") def validate_username(self, имя пользователя): пользователь = User.query.filter_by(имя_пользователя=имя_пользователя.данные).first() если пользователь: поднять ValidationError( «Это имя пользователя занято. Пожалуйста, выберите другое». ) def validate_email(я, адрес электронной почты): пользователь = User.query.filter_by(email=email.data).first() если пользователь: поднять ValidationError("Этот адрес электронной почты занят. Пожалуйста, выберите другой.") класс LoginForm(FlaskForm): электронная почта = StringField("Электронная почта", validators=[DataRequired(), Email()]) пароль = PasswordField("Пароль", validators=[DataRequired()]) Remember = BooleanField("Запомнить меня") submit = SubmitField("Логин") Точная ошибка:
(venv) asu@asu-Lenovo-Legion-5-15ARH05:/media/asu/Data/Projects/flask_blog1$ python3 run.py Traceback (последний вызов последний): Файл «/media/asu/Data/Projects/flask_blog1/run.py», строка 1, в из приложения импорта flaskblog Файл «/media/asu/Data/Projects/flask_blog1/flaskblog/__init__.py», строка 4, в из flask_login импортировать LoginManager Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/__init__.py», строка 12, в из .login_manager импортировать LoginManager Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/login_manager.py», строка 33, в из .utils импортировать _create_identifier Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/utils.py», строка 14, в из werkzeug.urls импортировать url_decode Ошибка ImportError: невозможно импортировать имя «url_decode» из «werkzeug.urls» (/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/werkzeug/urls.py)
Я создаю веб-приложение с помощью Flask. Я импортировал библиотеку flask-login для обработки входа пользователя. Но выдает ошибку ImportError.
Ниже приведена структура моих папок:
>flask_blog1 >флакблог >статический >шаблоны >__init__.py >forms.py >models.py >routes.py >экземпляр >site.db >венв >requirements.txt >run.py Мой run.py:
из приложения импорта flaskblog если __name__ == "__main__": app.run(отладка=Истина) Мой __init__.py:
из фляги импорта колбы из flask_sqlalchemy импортировать SQLAlchemy из flask_bcrypt импортировать Bcrypt из flask_login импортировать LoginManager приложение = Колба(__name__) app.config["SECRET_KEY"] = "5791628bb0b13ce0c676dfde280ba245" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db" БД = SQLAlchemy (приложение) bcrypt = Bcrypt (приложение) login_manager = LoginManager (приложение) из маршрутов импорта flaskblog Мой models.py:
из даты и времени импорта даты и времени # из базы данных импорта .extensions из базы данных импорта flaskblog, login_manager из flask_login импортировать UserMixin @login_manager.user_loader защита load_user (user_id): вернуть User.query.get(int(user_id)) класс User(db.Model, UserMixin): id = db.Column(db.Integer, Primary_key=True) имя пользователя = db.Column(db.String(20), unique=True, nullable=False) электронная почта = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default="default.jpg") пароль = db.Column(db.String(60), nullable=False) сообщения = db.relationship("Сообщение", backref="автор", lazy=True) защита __repr__(сам): return f"User('{self.username}', '{self.email}', '{self.image_file}')" сообщение класса (db.Model): id = db.Column(db.Integer, Primary_key=True) заголовок = db.Column(db.String(100), nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) содержимое = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) защита __repr__(сам): return f"Post('{self.title}', '{self.date_posted}')" Мой routes.py:
из фляги import render_template, flash, redirect, url_for из приложения импорта flaskblog, db, bcrypt из flaskblog.forms импортировать RegistrationForm, LoginForm из flaskblog.models импортировать пользователя, сообщение из flask_login импортировать login_user сообщения = [ { "author": "Ашутош Чапагайн", "title": "Сообщение в блоге 1", "content": "Содержимое первого сообщения", "date_posted": "1 октября 2023 г.", }, { "автор": "Эш Дхакал", "title": "Сообщение в блоге 2", "content": "Содержимое второго сообщения", "date_posted": "2 октября 2023 г.", }, ] @app.route("/") @app.route("/домой") защита дома(): return render_template("home.html", messages=posts) @app.route("/о") определение о(): return render_template("about.html", title="О программе") @app.route("/register", методы = ["GET", "POST"]) Защитный регистр(): форма = РегистрационнаяФорма() если form.validate_on_submit(): hashed_password = bcrypt.generate_password_hash(form.password.data).decode( "utf-8" ) пользователь = Пользователь( имя пользователя = form.username.data, адрес электронной почты = form.email.data, пароль = hashed_password ) db.session.add(пользователь) db.session.commit() flash(f"Ваша учетная запись создана! Теперь вы можете войти в систему!", "успех") вернуть перенаправление(url_for("логин")) return render_template("register.html", title="Регистрация", form=form) @app.route("/login", методы = ["GET", "POST"]) защита входа(): форма = Форма входа() если form.validate_on_submit(): пользователь = User.query.filter_by(email=form.email.data).first() if user и bcrypt.check_password_hash(user.password, form.password.data): login_user(пользователь, Remember=form.remember.data) вернуть перенаправление(url_for("домой")) еще: flash("Вход не удался. Пожалуйста, проверьте адрес электронной почты и пароль», «опасность») return render_template("login.html", title="Логин", form=form) Мой forms.py:
из flask_wtf импорта FlaskForm из wtforms импортируйте StringField, PasswordField, SubmitField, BooleanField из wtforms.validators импортировать DataRequired, Длина, Электронная почта, EqualTo, ValidationError из flaskblog.models импортировать пользователя Класс RegistrationForm(FlaskForm): имя пользователя = StringField( «Имя пользователя», валидаторы=[DataRequired(), Длина(мин=2, макс=20)] ) электронная почта = StringField("Электронная почта", validators=[DataRequired(), Email()]) пароль = PasswordField("Пароль", validators=[DataRequired()]) подтверждение_пароля = Поле Пароля( «Подтвердить пароль», validators=[DataRequired(), EqualTo(»пароль»)] ) submit = SubmitField("Регистрация") def validate_username(self, имя пользователя): пользователь = User.query.filter_by(имя_пользователя=имя_пользователя.данные).first() если пользователь: поднять ValidationError( «Это имя пользователя занято. Пожалуйста, выберите другое». ) def validate_email(я, адрес электронной почты): пользователь = User.query.filter_by(email=email.data).first() если пользователь: поднять ValidationError("Этот адрес электронной почты занят. Пожалуйста, выберите другой.") класс LoginForm(FlaskForm): электронная почта = StringField("Электронная почта", validators=[DataRequired(), Email()]) пароль = PasswordField("Пароль", validators=[DataRequired()]) Remember = BooleanField("Запомнить меня") submit = SubmitField("Логин") Точная ошибка:
(venv) asu@asu-Lenovo-Legion-5-15ARH05:/media/asu/Data/Projects/flask_blog1$ python3 run.py Traceback (последний вызов последний): Файл «/media/asu/Data/Projects/flask_blog1/run.py», строка 1, в из приложения импорта flaskblog Файл «/media/asu/Data/Projects/flask_blog1/flaskblog/__init__.py», строка 4, в из flask_login импортировать LoginManager Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/__init__.py», строка 12, в из .login_manager импортировать LoginManager Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/login_manager.py», строка 33, в из .utils импортировать _create_identifier Файл «/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/flask_login/utils.py», строка 14, в из werkzeug.urls импортировать url_decode Ошибка ImportError: невозможно импортировать имя «url_decode» из «werkzeug.urls» (/media/asu/Data/Projects/flask_blog1/venv/lib/python3.10/site-packages/werkzeug/urls.py)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка ImportError: невозможно импортировать имя «url_encode» из «werkzeug».
Anonymous » » в форуме Python - 0 Ответы
- 48 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ошибка ImportError: невозможно импортировать имя «ПсевдоЭлемент» из «cssselect.parser»?
Anonymous » » в форуме Python - 0 Ответы
- 70 Просмотры
-
Последнее сообщение Anonymous
-