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日

相关文章

  • Flask中基于Token的身份认证的实现

    下面是Flask中基于Token的身份认证的实现完整攻略: 一、什么是基于Token的身份认证 基于Token的身份认证,通常是指在Web应用程序中通过Token来验证用户身份的一种方式。这种方式相比传统的Session认证方式,具有以下优势: 无状态:Token身份验证不需要在服务端维护session,因此可以实现无状态的验证。 可扩展:由于每个请求都携带…

    Flask 2023年5月16日
    00
  • Flask深入了解Jinja2引擎的用法

    首先介绍一下Jinja2引擎,它是一个基于Python的模板引擎,常用于web开发中生成HTML页面。 一、Jinja2引擎的基本用法 在Flask中,可以通过实例化Jinja2对象,将其与app关联,来使用Jinja2引擎。示例代码如下: from flask import Flask, render_template from jinja2 import…

    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
  • Python flask sqlalchemy的简单使用及常用操作

    本文将为大家介绍Python Flask结合SQLAlchemy的简单使用及常用操作,内容分为以下几个部分: Flask简介 SQLAlchemy简介 简单使用Flask和SQLAlchemy 常用操作 示例说明 总结 1. Flask简介 Flask是一个轻量级的Python web开发框架,它的核心思想是保持简单和灵活。Flask的特点是基于Werkze…

    Flask 2023年5月15日
    00
  • Python中import导入上一级目录模块及循环import问题的解决

    导入上一级目录模块在Python中十分常见,可以通过修改Python路径或使用相对路径解决。而循环import问题则需要注意模块之间的依赖关系,防止出现无限循环导致程序崩溃问题。本文将详细讲解这两个问题的解决方案,其中包含两个示例代码。 导入上一级目录模块 在Python中,导入上一级目录模块,可以通过修改系统路径添加或使用相对路径来解决。 修改系统路径添加…

    Flask 2023年5月16日
    00
  • nodejs微信开发之接入指南

    下面是对于“nodejs微信开发之接入指南”的详细讲解,以及两条示例说明。 Node.js微信开发之接入指南 一、基础知识 1.申请微信公众号 首先,我们需要在微信公众平台上申请一个公众号。 2.配置开发者工具 登录微信公众平台后,在开发者中心中配置开发者工具。这里需要设置服务器配置和公众号设置。 3.节点服务器配置 在开发者工具中,需要设置一个节点服务器,…

    Flask 2023年5月16日
    00
  • Elasticsearches之python使用及Django与Flask集成示例

    下面我将为您详细讲解“Elasticsearches之python使用及Django与Flask集成示例”的完整攻略,这个攻略主要包含两个示例说明:使用python操作Elasticsearch以及如何将Elasticsearch集成到Django和Flask中。 Elasticsearches之Python使用 安装elasticsearch-py 首先,…

    Flask 2023年5月16日
    00
  • Flask request 对象介绍

    Flask Request 对象介绍 在 Flask 应用中,Request 对象是非常重要的一个对象,因为它提供了访问客户端发送的 HTTP 请求信息的方法和属性。 在本文中,我们将详细介绍 Flask Request 对象的用法和属性。 Request 对象的属性 在 Flask 应用中,Request 对象包含了客户端发送的 HTTP 请求信息,可以通…

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