У меня такое ощущение, что у меня есть две проблемы:
- Моя функция маршрутизации страницы профиля чувствует, что я должен показывать страницу профиля, используя идентификатор пользователя. Вместо этого я просто показываю вошедшего в систему пользователя. Это работает, но не кажется правильным способом сделать это для следующего шага. Пример. Вместо «/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 }}
{{ 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