Невозможно заставить таблицу пользователей обновить базу данных sqlite со страницы профиля пользователя – Python Flask SPython

Программы на Python
Anonymous
Невозможно заставить таблицу пользователей обновить базу данных sqlite со страницы профиля пользователя – Python Flask S

Сообщение Anonymous »

В настоящее время я пытаюсь создать страницу профиля пользователя с помощью Python, используя Flask и SQlite. Мне удалось создать страницу профиля для отображения информации о текущих пользователях. Кнопка на странице профиля переводит пользователя на страницу «edit_account.html» с формой, позволяющей пользователям отправить свою информацию для изменения. После отправки формы она перенаправляет пользователя на страницу его профиля, но вся информация остается той же, ничего не изменилось. Похоже, что эта форма на самом деле ничего не меняет в базе данных.
У меня такое ощущение, что у меня есть две проблемы:
  • Моя функция маршрутизации страницы профиля чувствует, что я должен показывать страницу профиля, используя идентификатор пользователя. Вместо этого я просто показываю вошедшего в систему пользователя. Это работает, но не кажется правильным способом сделать это для следующего шага. Пример. Вместо «/profile» должно быть написано «/profile/username»?
  • Моя функция «edit_account» кажется, что я ошибся, и я предполагаю, что именно поэтому база данных не обновляется.
Правда в том, что теперь я не вижу древесины за деревьями, и я рискую устроить еще больший беспорядок, не исправив . Что я пробовал:
  • Я пытался добавить «User.id» в функцию просмотра, но это выдает ошибку (не могу вспомнить точное сообщение об ошибке, возможно, что-то связанное с неопределенным пользователем).
  • Я попробовал изменить html-файл на «User.id», и снова получил ошибку.
Я пытаюсь добиться следующего:
  • Я хочу, чтобы страница профиля автоматически заполнить информацию о пользователе из базы данных.
  • Я хочу, чтобы форма «edit_account» обновляла базу данных любыми полями, которые пользователь выбирает для обновления.
  • Затем Я хочу, чтобы он перенаправлял пользователя обратно на страницу его профиля, чтобы увидеть новую информацию.
Я просмотрел этот сайт, но ответы недостаточно конкретны. к моей проблеме.
Я знаю, что это, вероятно, что-то простое и, возможно, из-за моего плохого программирования, но я энтузиаст, а не профессионал.
Все помощь очень ценится. :)
Views.py
@users.route('/edit_account', methods=['GET', 'POST'])
@login_required
def edit_account():
form = UpdateUserForm()
if form.validate_on_submit():

if form.picture.data:
username = current_user.username
pic = add_profile_pic(form.picture.data, username)
current_user.profile_image = pic

db.session.commit(User.id)
flash('Your account has been updated')
return redirect(url_for('users.profile'))

elif request.method == 'GET':
form.username.data = current_user.username
form.email.data = current_user.email
form.password.data = current_user.password_hash
form.fname.data = current_user.fname
form.lname.data = current_user.lname
form.phone.data = current_user.phone
form.address.data = current_user.address
form.postcode.data = current_user.postcode

db.session.commit()

profile_image = url_for('static', filename='profile_pics/'+current_user.profile_image)
return render_template('edit_account.html', profile_image=profile_image, form=form)

@users.route('/profile')
@login_required
def profile():
return render_template('profile.html',)

Models.py
@login_manager.user_loader
def load_user(id):
return User.query.get(id)

class User(db.Model,UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True, nullable=False)
password_hash = db.Column(db.String(128))
fname = db.Column(db.String, unique=False, nullable=True)
lname = db.Column(db.String, unique=False, nullable=True)
phone = db.Column(db.Integer, unique=True, nullable=True)
email = db.Column(db.String(64), unique=True, index=True)
address = db.Column(db.String, unique=False, nullable=True)
postcode = db.Column(db.String, unique=False, nullable=True)
profile_image = db.Column(db.String(64), nullable=True, default='default_profile.png')
role = db.relationship('Role', back_populates='user', lazy=True)
posts = db.relationship('BlogPost', back_populates='user', lazy=True)

def __init__(self,email,password, username, fname, lname, phone, address, postcode):
self.password_hash = generate_password_hash(password)
self.email = email
self.username = username
self.fname = fname
self.lname = lname
self.phone = phone
self.address = address
self.postcode = postcode

Forms.py
class UpdateUserForm(FlaskForm):
email = StringField('Email', validators=[Email()])
password = PasswordField('Password', validators=[])
username = StringField('Username', validators=[])
picture = FileField('Update profile picture', validators=[FileAllowed(['jpg','png'])])
fname = StringField('First name', validators=[])
lname = StringField('Last name', validators=[])
phone = StringField('Phone', validators=[])
address = StringField('Address(excluding postcode)', validators=[])
postcode = StringField('Postcode', validators=[])
submit = SubmitField('Confirm Update')

Profile.html
{% extends "base.html" %}
{% block content %}





Изображение





{% if current_user.is_authenticated %}
Meet {{ current_user.username }}
{% endif %}

  • About
  • Timeline


Edit Profile





ABOUT
Name: {{ current_user.fname }}

Bootsnipp Profile

Bootply Profile
SKILLS
Web Designer

Web Developer

WordPress

WooCommerce

PHP, .Net







Username

{{ current_user.username }}




Name

{{ current_user.fname }} {{ current_user.lname }}




Email

{{ current_user.email }}




Phone

{{ current_user.phone }}




Profession

Driving Instructor






Teaches

Manual Gearbox




Hourly Rate

£40/hr




Car

Audi A1 TFSI Sportback 2019




Years of experience

1yr




Availability

6 months




Your Bio

Your detail description









{% endblock %}

Edit_account.html
{% extends "base.html" %}
{% block content %}



Edit Profile

Изображение


{{ form.hidden_tag() }}

{{ form.username.label(class='form-label') }}
{{ form.username(class='form-control') }}

{{ form.email.label(class='form-group') }}
{{ form.email(class='form-control') }}

{{ form.password.label(class='form-label') }}
{{ form.password(class='form-control') }}

{{ form.fname.label(class='form-label') }}
{{ form.fname(class='form-control') }}

{{ form.lname.label(class='form-label') }}
{{ form.lname(class='form-control') }}

{{ form.phone.label(class='form-label') }}
{{ form.phone(class='form-control') }}

{{ form.address.label(class='form-label') }}
{{ form.address(class='form-control') }}

{{ form.postcode.label(class='form-label') }}
{{ form.postcode(class='form-control') }}

{{ form.picture.label(class='form-group') }}
{{ form.picture(class='form-control') }}

{{ form.submit(class='btn btn-primary') }}







{% endblock %}


Подробнее здесь: https://stackoverflow.com/questions/789 ... e-python-f

Вернуться в «Python»