当前位置:知识百科 > 正文

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

更新时间:2025-01-06 02:24 阅读量:72431

需求分析

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

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

用户注册

用户登录

用户登出

用户信息修改

搭建项目环境

在本次项目中,我们主要使用 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.自动生成,并设置为主键.

created_at:创建时间.时间类型,设置为当前时间.

updated_at:更新时间.时间类型,设置为当前时间(自动更新).

定义用户登录和注册路由

在 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 路径.在该函数中,我们从表单中获取用户的数据,并校验用户名和邮箱是否已经被注册.

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

在 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 中,并重定向到首页.若用户不存在或密码错误,则重新渲染登录页面并提示错误信息.

完成用户数据管理

显示用户信息

在 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 中获取用户信息,然后将该用户的信息渲染到页面中.

实现用户的修改

在 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登录注册项目的简单实现相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!