Python的Flask框架中实现登录用户的个人资料和头像的教程

以下是Python Flask框架实现用户个人资料和头像的教程攻略,分为两部分:

  1. 用户个人资料的实现

1.1 创建用户资料模型

首先,我们需要在数据库中创建一个用户资料模型(model),用来存储用户个人信息。模型主要包括以下几个字段:用户名、电子邮箱、密码、性别、生日等等。具体实现可参考以下代码:

from flask_login import UserMixin
from datetime import datetime
from your_app_name import db, login_manager

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    gender = db.Column(db.String(6))
    birthday = db.Column(db.DateTime, default=datetime.utcnow)
    avatar = db.Column(db.String(20), nullable=False, default='default.jpg')

1.2 创建用户资料表单

接下来,我们需要为用户资料创建一个表单,这个表单主要包含用户资料的各项数据。用户可以通过这个表单进行修改和更新个人资料。具体实现可参考以下代码:

from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, PasswordField, BooleanField, SubmitField, SelectField, DateField, TextAreaField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from flask_login import current_user
from your_app_name.models import User

class UpdateAccountForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    gender = SelectField('Gender', choices=[('Male', 'Male'), ('Female', 'Female')])
    birthday = DateField('Birthday')
    picture = FileField('Update Profile Picture', validators=[FileAllowed(['jpg', 'png'])])
    submit = SubmitField('Update')

    def validate_username(self, username):
        if username.data != current_user.username:
            user = User.query.filter_by(username=username.data).first()
            if user:
                raise ValidationError('That username is taken. Please choose a different one.')

    def validate_email(self, email):
        if email.data != current_user.email:
            user = User.query.filter_by(email=email.data).first()
            if user:
                raise ValidationError('That email is taken. Please choose a different one.')

1.3 创建用户资料视图

最后,我们需要为用户资料创建一个视图(view),让用户能够在网页上查看和修改自己的个人信息。具体实现可参考以下代码:

from flask import render_template, url_for, flash, redirect, request
from flask_login import login_required, current_user
from your_app_name import app, db, bcrypt
from your_app_name.forms import UpdateAccountForm
from your_app_name.models import User

@app.route('/account', methods=['GET', 'POST'])
@login_required
def account():
    form = UpdateAccountForm()
    if form.validate_on_submit():
        if form.picture.data:
            picture_file = save_picture(form.picture.data)
            current_user.avatar = picture_file
        current_user.username = form.username.data
        current_user.email = form.email.data
        current_user.gender = form.gender.data
        current_user.birthday = form.birthday.data
        db.session.commit()
        flash('Your account has been updated!', 'success')
        return redirect(url_for('account'))
    elif request.method == 'GET':
        form.username.data = current_user.username
        form.email.data = current_user.email
        form.gender.data = current_user.gender
        form.birthday.data = current_user.birthday
    image_file = url_for('static', filename='profile_pics/' + current_user.avatar)
    return render_template('account.html', title='Account',
                           image_file=image_file, form=form)
  1. 用户头像的实现

2.1 保存用户头像

用户头像(avatar)一般是以图片的形式呈现,因此我们需要一个保存用户头像的功能,以保证用户更新或上传头像后,程序能够正常保存并显示最新的头像。

import os
import secrets
from PIL import Image
from flask import current_app

def save_picture(form_picture):
    random_hex = secrets.token_hex(8)
    _, f_ext = os.path.splitext(form_picture.filename)
    picture_filename = random_hex + f_ext
    picture_path = os.path.join(current_app.root_path, 'static/profile_pics', picture_filename)

    output_size = (125, 125)
    i = Image.open(form_picture)
    i.thumbnail(output_size)

    i.save(picture_path)

    return picture_filename

2.2 修改用户资料表单

用户头像的上传和更新是通过表单实现的,因此我们需要在UpdateAccountForm中添加picture字段:

class UpdateAccountForm(FlaskForm):
    # ...
    picture = FileField('Update Profile Picture', validators=[FileAllowed(['jpg', 'png'])])
    submit = SubmitField('Update')

2.3 修改用户资料视图

最后,在account视图中添加保存用户头像的逻辑和显示头像的代码:

from your_app_name.utils import save_picture

# ...

@app.route('/account', methods=['GET', 'POST'])
@login_required
def account():
    form = UpdateAccountForm()
    if form.validate_on_submit():
        if form.picture.data:
            picture_file = save_picture(form.picture.data)
            current_user.avatar = picture_file
        # ...
    image_file = url_for('static', filename='profile_pics/' + current_user.avatar)
    return render_template('account.html', title='Account',
                           image_file=image_file, form=form)

至此,Python Flask框架实现用户个人资料和头像的教程攻略就结束了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的Flask框架中实现登录用户的个人资料和头像的教程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 在Python的Flask中使用WTForms表单框架的基础教程

    下面我将为您讲解在Python的Flask中使用WTForms表单框架的基础教程。 一、安装WTForms 在Python命令行中使用pip命令安装WTForms框架,方法如下: pip install WTForms 二、使用WTForms 1.创建表单类 首先,我们需要创建一个表单类来描述我们的表单。在这个表单类中,我们需要定义表单的字段类型、验证规则以…

    Flask 2023年5月16日
    00
  • python flask开发的简单基金查询工具

    下面是详细讲解“python flask开发的简单基金查询工具”的完整攻略。 介绍 Python Flask是一个轻量级的Web框架,它可以帮助我们快速地搭建Web应用程序。在这篇攻略中,我们将使用Python Flask框架来构建一个简单的基金查询工具。 环境要求 在开始之前,我们需要准备好以下环境: Python 3.x Flask requests b…

    Flask 2023年5月15日
    00
  • Flask框架学习笔记之模板操作实例详解

    下面就来详细讲解“Flask框架学习笔记之模板操作实例详解”的完整攻略,并包含两条示例说明。 概述 在Flask框架中,模板是最常用的组件之一。模板是一个包含特定语法的文本文件,它可以在运行时被动态地替换为具体内容。通过使用模板,我们可以将内容与代码分离,使得我们的代码更加易于维护和可读性更强。 在本篇攻略中,我们将详细讲解如何在Flask框架中使用模板。我…

    Flask 2023年5月16日
    00
  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • 详解python执行shell脚本创建用户及相关操作

    下面我将详细讲解如何使用Python执行Shell脚本并创建用户及相关操作,并提供两个示例作为说明。 进行前的准备工作 在开始之前,我们需要确认Python和Shell都已经安装好并且可用。同时,我们需要明确本次操作需要使用到的Python模块和Shell命令。具体的准备工作如下: Python模块 本次操作需要使用到的Python模块有: os: 用于执行…

    Flask 2023年5月15日
    00
  • Flask搭建api服务的实现步骤

    下面是详细的“Flask搭建api服务的实现步骤”的完整攻略。 准备工作 在开始之前,我们需要安装一些必要的工具。具体来说,我们需要安装Python和Flask框架。 关于Python的安装,可以参考官方文档:https://www.python.org/downloads/ 关于Flask框架的安装,可以在命令行中执行以下命令: pip install f…

    Flask 2023年5月15日
    00
  • python中如何使用虚拟环境

    使用虚拟环境可以避免不同项目之间的依赖冲突,提高项目开发和部署的可靠性。下面是Python中使用虚拟环境的完整攻略: 步骤 1: 安装虚拟环境 要使用虚拟环境,我们需要先安装虚拟环境模块venv。通常情况下,Python3自带了venv模块,因此你不需要额外安装。如果你使用的是Python2,则可以使用virtualenv来创建虚拟环境。以下是在Linux或…

    Flask 2023年5月15日
    00
  • Python的Flask框架使用Redis做数据缓存的配置方法

    下面我将详细讲解“Python的Flask框架使用Redis做数据缓存的配置方法”的完整攻略,过程中包含两条示例说明。 1. 安装Redis 首先需要安装Redis,可以在官网下载对应的安装包进行安装。安装完成后,需要启动Redis服务: redis-server 如果Redis成功启动,则会出现以下提示信息: Server started, Redis v…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部