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日

相关文章

  • 利用 Flask 动态展示 Pyecharts 图表数据方法小结

    以下是详细的攻略: 利用 Flask 动态展示 Pyecharts 图表数据方法小结 一、背景 在 Web 应用开发过程中,展示数据是一个非常重要的需求。而 Pyecharts 是一个非常强大且易于使用的数据可视化库,尤其是在 Python 中使用时更是如此。而 Flask 则是一款非常流行的 Python Web 框架,使用 Flask 动态展示 Pyec…

    Flask 2023年5月15日
    00
  • 解决python flask中config配置管理的问题

    我来详细讲解“解决Python Flask中config配置管理的问题”的完整攻略。 1. 配置文件的组织 在Flask应用中使用config配置是一个常见的方法,它可以帮助我们分离开发和生产环境的不同配置。但是,一些常见的问题是: 如何组织config文件? 如何为不同的配置创建不同的文件? 如何保护敏感数据而不将其提交给版本控制? 下面,我会为这些问题提…

    Flask 2023年5月16日
    00
  • Python Flask框架实现Proteus仿真Arduino与网页数据交互

    让我为您提供一份详细的攻略,来实现Python Flask框架实现Proteus仿真Arduino与网页数据交互。 安装Proteus和Arduino IDE 首先,您需要安装Proteus仿真软件和Arduino IDE开发环境,这样才能进行电路仿真和代码编写。您可以根据自己的操作系统下载合适的安装包进行安装。 准备硬件 接下来,您需要准备一块Arduin…

    Flask 2023年5月16日
    00
  • Pycharm+Flask零基础项目搭建入门的实现

    我将为您详细讲解“Pycharm+Flask零基础项目搭建入门的实现”的完整攻略。该攻略分为以下几个步骤: 1. 安装Pycharm和Flask 首先需要安装Python的开发环境——Pycharm。Pycharm是一个功能强大、使用便捷的Python集成开发环境,可以大大提高开发效率。 安装完Pycharm后,需要安装Flask,这是一个基于Python的…

    Flask 2023年5月15日
    00
  • Flask框架学习笔记(一)安装篇(windows安装与centos安装)

    下面我来详细讲解一下“Flask框架学习笔记(一)安装篇(Windows安装与CentOS安装)”这篇文章的完整攻略。 安装篇 1. Windows安装 1.1 安装Python环境 首先,我们需要在Windows系统中安装Python环境。进入Python官网(https://www.python.org/downloads/windows/),选择最新版…

    Flask 2023年5月15日
    00
  • 一个基于flask的web应用诞生 组织结构调整(7)

    我来给你详细讲解一下。 “一个基于flask的web应用诞生 组织结构调整(7)”是一篇关于使用Flask框架搭建web应用的教程。其中,作者介绍了如何使用Flask框架来构建一个基础的web应用,并通过对项目的组织结构进行调整,使得代码更加清晰易懂,可维护性更高。 这篇教程主要包括以下内容: 创建Flask应用 通过使用Flask框架提供的API,可以快速…

    Flask 2023年5月15日
    00
  • python 获取sqlite3数据库的表名和表字段名的实例

    接下来我将详细讲解“python 获取sqlite3数据库的表名和表字段名的实例”的完整攻略,过程中也会包含两条示例说明。 1. 获取sqlite3数据库的表名 我们可以通过sqlite_master系统表来获取sqlite3数据库中的表名。 示例代码: import sqlite3 def get_table_names(db_file_path): co…

    Flask 2023年5月16日
    00
  • flask+layui+echarts实现前端动态图展示数据效果

    下面是使用Flask、LayUI和ECharts实现前端动态数据展示效果的完整攻略,包含两个示例。 步骤一:安装并配置Flask 安装Flask:在命令行窗口中输入pip install Flask即可安装。 创建Flask应用:在项目文件夹中创建一个名为app.py的Python文件,并编写代码: “`python from flask import F…

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