Flask登录注册项目的简单实现

我们针对 "Flask登录注册项目的简单实现" 进行一步一步的讲解:

需求分析

在进行一个项目的开发前,首先要进行需求分析,明确该项目的具体功能。

在本次项目中,我们主要需要实现以下功能:

  • 用户注册
  • 用户登录
  • 用户登出
  • 用户信息修改

搭建项目环境

在本次项目中,我们主要使用 Flask 框架进行开发,因此,我们需要先进行 Flask 的安装。使用以下命令安装 Flask:

pip install Flask

模块、目录结构设计

在我们进行完需求分析和环境搭建后,我们需要对项目进行模块和目录结构的设计。

我们可以采用以下结构:

app/
│   __init__.py
│
├───static/
│   │   
│   └───css/
│   │   │   
│   │   └───style.css
│   │
│   └───js/
│       │   
│       └───script.js
│
├───templates/
│   │   
│   └───base.html
│   │
│   └───login.html
│   │
│   └───register.html
│   │
│   └───profile.html
│
└───routes/
    │   
    └───__init__.py
    │
    └───auth.py
    │
    └───main.py

其中:

  • app 文件夹是 Flask 应用的主要文件夹,用于存放 Flask 主应用实例。
  • static 文件夹用于存放静态文件,如 CSS、JavaScript 和图片等。
  • templates 文件夹用于存放模板文件。
  • routes 文件夹用于存放路由文件。

建立 Flask 应用

建立 Flask 应用的主要文件是 app/__init__.py 文件。我们可以在这个文件中创建 Flask 应用实例,并指定一些配置信息:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

在上面的代码中,我们使用了 Flask 框架的 Flask 类创建应用实例,并设置了一些用于连接数据库的配置信息。

定义用户数据模型

在本项目中,我们需要对用户数据进行操作,因此需要先定义用户模型。

from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(128), unique=True, nullable=False)
    password_hash = db.Column(db.String(256), nullable=False)
    email = db.Column(db.String(256), unique=True, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

    def __init__(self, username, password, email):
        self.username = username
        self.email = email
        self.password_hash = generate_password_hash(password, method='pbkdf2:sha256')

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

在上述代码中,我们使用 Flask 提供的 SQLALchemy 对象构建用户数据模型,同时,我们定义了以下属性:

  • id:用户 ID。自动生成,并设置为主键。
  • username:用户名。字符类型,长度为 128,不可为空,并设置为唯一值。
  • password_hash:密码。字符类型,长度为 256,且不可为空。
  • email:用户邮箱。字符类型,长度为 256,不可为空,并设置为唯一值。
  • created_at:创建时间。时间类型,设置为当前时间。
  • updated_at:更新时间。时间类型,设置为当前时间(自动更新)。

定义用户登录和注册路由

  1. 用户注册

routes/auth.py 中,定义用户注册路由。

from flask import render_template, request, redirect, url_for
from app import app, db
from app.models import User

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form.get('username').strip()
        email = request.form.get('email').strip()
        password = request.form.get('password').strip()

        user = User.query.filter_by(username=username).first()
        if user:
            return render_template('register.html', error='Username already exists')

        user = User.query.filter_by(email=email).first()
        if user:
            return render_template('register.html', error='Email already exists')

        user = User(username=username, email=email, password=password)
        db.session.add(user)
        db.session.commit()

        return redirect(url_for('auth.login'))

    return render_template('register.html')

通过 @app.route 装饰器将该函数绑定到 /register 路径。在该函数中,我们从表单中获取用户的数据,并校验用户名和邮箱是否已经被注册。

如果没有则将数据加入数据库并返回到登录页面。

2 . 用户登录

routes/auth.py 文件中,定义用户登录页面并处理登录请求。

from flask import render_template, request, redirect, url_for, session
from app import app
from app.models import User

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form.get('username').strip()
        password = request.form.get('password').strip()
        remember = request.form.get('remember')

        user = User.query.filter_by(username=username).first()
        if user and user.check_password(password):
            session['user_id'] = user.id
            session['user_username'] = user.username
            session['user_email'] = user.email

            if remember == 'on':
                session.permanent = True

            return redirect(url_for('main.index'))
        else:
            error = 'Incorrect username or password'
            return render_template('login.html', error=error)

    return render_template('login.html')

通过 @app.route 装饰器将该函数绑定到 /login 路径。在该函数中,我们从表单中获取用户名和密码,判断用户是否已注册、密码是否正确。

若用户存在且密码正确,则将用户信息存入 session 中,并重定向到首页。若用户不存在或密码错误,则重新渲染登录页面并提示错误信息。

完成用户数据管理

  1. 显示用户信息

routes/main.py 文件中,定义显示用户信息的路由。

from flask import render_template, session
from app import app

@app.route('/profile')
def profile():
    user_id = session.get('user_id')
    user_username = session.get('user_username')
    user_email = session.get('user_email')

    return render_template('profile.html', user_id=user_id, user_username=user_username, user_email=user_email)

通过 @app.route 装饰器将该函数绑定到 /profile 路径。在该函数中,我们从 session 中获取用户信息,然后将该用户的信息渲染到页面中。

  1. 实现用户的修改

routes/main.py 文件中,定义修改用户的路由。

from flask import render_template, request, session, redirect, url_for
from app import app, db
from app.models import User

@app.route('/profile/edit', methods=['GET', 'POST'])
def profile_edit():
    if request.method == 'POST':
        user_id = session.get('user_id')
        username = request.form.get('username').strip()
        email = request.form.get('email').strip()

        user = User.query.filter_by(id=user_id).first()
        user.username = username
        user.email = email

        db.session.commit()

        session['user_username'] = username
        session['user_email'] = email

        return redirect(url_for('main.profile'))

    return render_template('profile_edit.html')

通过 @app.route 装饰器将该函数绑定到 /profile/edit 路径。在该函数中,我们从 session 中获取用户 ID,并将修改后的用户名和邮箱存入数据库中。

结语

至此,我们就完成了 Flask 登录注册项目的简单实现。在这个过程中,我们主要完成了以下操作:

  • 通过环境和应用建立,完成对 Flaks 应用实例的创建
  • 设计项目的目录结构和模块划分
  • 使用 Flask 和 SQLAlchemy 定义用户数据模型和用户相关的操作
  • 定义用户登录和注册路由
  • 实现用户数据的管理

以上是本次"Flask登录注册项目的简单实现"的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask登录注册项目的简单实现 - Python技术站

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

相关文章

  • django和flask哪个值得研究学习

    Django和Flask的区别 Django和Flask都是Python中流行的Web框架,但是它们在使用方式上有着很大的不同。 Django Django是一个完整的Web框架,提供了一整套Web开发的解决方案。Django包括了ORM、模板引擎、路由系统、Cookie/Session等常用组件,所以在创建一个Web应用时,可以省略掉很多低层次的工作。 D…

    Flask 2023年5月15日
    00
  • python自动化测试中APScheduler Flask的应用示例

    以下是关于“python自动化测试中APScheduler Flask的应用示例”的详细讲解: 简介 APScheduler 是一个轻量级的 Python 定时任务调度框架,可以添加多个任务,可以动态添加修改和删除任务,先来看一下简单示例: from apscheduler.schedulers.blocking import BlockingSchedul…

    Flask 2023年5月16日
    00
  • 用 Flask 实现发送电子邮件

    Flask 是一款轻量级的 Web 框架,非常适合快速开发小型 Web 应用。 在这篇文章中,我们将详细介绍如何在 Flask 应用中发送邮件。 安装 Flask-Mail 扩展 首先,我们需要安装 Flask-Mail 扩展来发送邮件。可以使用下面的命令来安装 Flask-Mail: pip install Flask-Mail 接下来,我们需要设置 Fl…

    Flask 2023年3月13日
    00
  • Flask使用Pyecharts在单个页面展示多个图表的方法

    下面是详细讲解”Flask使用Pyecharts在单个页面展示多个图表的方法”的完整攻略,包含两条示例说明: 概述 Pyecharts提供了一种简单的方式展示图表,它基于Echarts,提供类似Python的API。使用Pyecharts生成单个图表很容易,但如果需要在一个页面上展示多个图表时,可能就需要一些额外的处理。本攻略将介绍使用Flask和Pyech…

    Flask 2023年5月15日
    00
  • Flask之flask-script模块使用

    下面是关于“Flask之flask-script模块使用”的完整攻略,包含两个示例说明。 什么是 Flask-Script 模块? Flask-Script 是 Flask 外部扩展库之一,它提供了一组命令行快捷方式,可用于管理应用程序的各种任务,例如初始化数据库、运行开发 web 服务器,等等。Flask-Script 使命令行交互更加方便。 安装 Fla…

    Flask 2023年5月15日
    00
  • Python进行Restful API开发实例详解

    下面我会详细讲解 Python 进行 Restful API 开发实例的完整攻略,并提供两个示例说明。 准备工作 在进行 Restful API 开发之前,需要安装 Flask 和 Flask-RESTful 等库。执行以下命令进行安装: pip install Flask Flask-RESTful 示例一:ToDo List 在这个示例中,我们将创建一个…

    Flask 2023年5月16日
    00
  • bootstrap flask登录页面编写实例

    下面将为您详细讲解“Bootstrap Flask登录页面编写实例”的完整攻略。 示例一:使用Flask-Login插件实现登录功能 首先,我们需要在Flask应用程序中安装Flask-Login插件,可以在终端中使用以下命令进行安装: pip install flask-login 接着,在Flask应用程序的文件中导入Flask-Login插件,并使用它…

    Flask 2023年5月15日
    00
  • Linux中使用top命令的技巧

    下面是“Linux中使用top命令的技巧”的完整攻略。 一、什么是top命令 top命令是一款常用的系统监控工具,可以实时查看系统的资源占用情况,包括进程占用的CPU、内存等。 二、top命令的参数和用法 top命令的常用参数如下: -d:指定刷新时间,默认为3秒; -p:指定监控的进程PID; -u:指定监控的用户; -H:显示进程的线程; -i:不显示I…

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