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

yizhihongxing

以下是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实现Mock Server详情

    下面是Python + Flask实现Mock Server的完整攻略: 1. 什么是Mock Server Mock Server是指一个虚拟的服务端,用于模拟实际的服务端行为以便进行测试和开发。通过构建Mock Server,我们可以在没有实际服务端的情况下进行开发和测试,从而提高开发效率。 2. Flask框架简介 Flask是一个轻量级的Web框架,…

    Flask 2023年5月15日
    00
  • Python Flask中Cookie和Session区别详解

    下面我为你详细讲解“Python Flask中Cookie和Session区别详解”的攻略,包含两个示例说明。 Cookie和Session的基本概念 在Flask开发中,Cookie和Session是两个经常使用的概念。Cookie是保存在客户端的记录,而Session是保存在服务器端的记录,通过Cookie来实现客户端和服务器端之间的信息传递。 Cook…

    Flask 2023年5月16日
    00
  • python3-flask-3将信息写入日志的实操方法

    下面我来详细讲解“python3-flask-3将信息写入日志的实操方法”的完整攻略。 1. 简介 在Flask应用程序中,日志可以帮助我们快速找到应用程序的问题。在日志中记录的对应的信息,有助于我们更快的定位问题并进行修复。在本文中,我们将会详细介绍如何将信息写入日志。在实现本案例时,我们会使用Python3、Flask框架,下面是示例代码。 2. 实现 …

    Flask 2023年5月15日
    00
  • Flask搭建虚拟环境并运行第一个flask程序

    接下来我将给出Flask搭建虚拟环境并运行第一个Flask程序的完整攻略。这里分为以下几个步骤: 1.安装Python和Flask 首先我们需要安装Python和Flask。建议直接从Python官方网站下载最新版本的Python。然后使用pip来安装Flask,命令:pip install flask。 2.搭建虚拟环境 为了避免Python版本和依赖库的…

    Flask 2023年5月15日
    00
  • Docker Compose多容器部署的实现

    Docker Compose是一个强大的工具,可以在多个Docker容器之间协调并维护关系,实现复杂的应用程序部署。本攻略将介绍如何使用Docker Compose完成多容器部署。 步骤1:创建Docker Compose文件 首先,我们需要在本地创建一个名为docker-compose.yml的文件。这个文件将包含我们所有需要部署的Docker容器的配置。…

    Flask 2023年5月16日
    00
  • 一文了解Flask框架

    Flask是一款基于Python语言的轻量级Web框架,它的设计目标是简单易用、高效灵活。其核心实现只有约3000行代码,但却支持RESTful请求、Jinja2模板引擎、Werkzeug工具箱等众多功能,适合用于构建小型Web应用、快速原型开发等领域。 Flask框架的核心思想是WSGI(Web Server Gateway Interface),即Web…

    2023年3月13日
    00
  • 新一代Python包管理工具

    这篇文章将为大家介绍新一代Python包管理工具——poetry的完整攻略,主要包括以下内容: 什么是poetry 安装poetry 使用poetry新建Python项目 使用poetry安装项目依赖包 使用poetry打包和发布项目 什么是poetry poetry是一款新一代Python包管理工具,它提供了以下功能: 定义项目的依赖关系 管理项目的虚拟环…

    Flask 2023年5月16日
    00
  • Windows系统下使用flup搭建Nginx和Python环境的方法

    下面是完整的攻略。首先,需要安装flup和Nginx,然后配置Nginx并使用flup搭建Python环境。 安装flup和Nginx 安装flup: $ pip install flup 安装Nginx: $ sudo apt-get update $ sudo apt-get install nginx 配置Nginx 配置Nginx以监听80端口,以便…

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