问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用Flask和SQLite打造高效软件登录系统

创作时间:
作者:
@小白创作中心

用Flask和SQLite打造高效软件登录系统

引用
CSDN
12
来源
1.
https://blog.csdn.net/Keep_Trying_Go/article/details/123781072
2.
https://blog.csdn.net/weixin_42259823/article/details/85073991
3.
https://blog.csdn.net/a930128/article/details/101159986
4.
https://blog.csdn.net/a1405/article/details/112801976
5.
https://blog.csdn.net/luansj/article/details/135246571
6.
https://dormousehole.readthedocs.io/
7.
https://www.sqlite.net.cn/
8.
https://juejin.cn/post/7244725146962575416
9.
https://flask.palletsprojects.com/en/stable/patterns/sqlalchemy/
10.
https://flask.palletsprojects.com/
11.
https://doc.yonyoucloud.com/doc/wiki/project/sqlite/sqlite-intro.html
12.
https://www.cnblogs.com/LewisAAA/p/9255982.html

在数字化时代,高效的登录系统是保障用户信息安全的关键。本文将详细介绍如何利用Python中的Flask框架和SQLite数据库来构建一个既安全又高效的登录验证系统。通过用户注册、密码加密和登录验证等功能模块,实现对用户信息的有效保护并提升用户体验。快来学习如何轻松搭建你的高效登录系统吧!

01

为什么选择Flask和SQLite?

Flask是一个轻量级的WSGI网络应用框架,旨在让用户快速、轻松上手,并能扩展到复杂的应用程序。SQLite则是一个小型、快速、自包含的SQL数据库引擎,适合用于小型项目和原型开发。两者结合,可以快速搭建一个高效且安全的登录系统。

02

系统设计

用户注册模块

用户注册是登录系统的第一个环节,需要实现以下功能:

  1. 表单验证:确保用户输入的用户名和密码符合要求
  2. 数据存储:将用户信息安全地存储到数据库中

使用Flask-WTF扩展可以方便地实现表单验证。以下是一个简单的注册表单示例:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

密码加密模块

为了保护用户密码安全,我们需要对密码进行加密存储。推荐使用SHA-256算法,它是一种安全的散列算法,可以生成256位的散列值。

from werkzeug.security import generate_password_hash

hashed_password = generate_password_hash(password, method='sha256')

登录验证模块

登录验证模块需要实现以下功能:

  1. 验证用户输入的用户名和密码是否正确
  2. 管理用户会话,保持用户登录状态

使用Flask-Login扩展可以方便地实现用户会话管理。以下是一个简单的登录表单示例:

from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

class User(UserMixin):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

@login_manager.user_loader
def load_user(user_id):
    return User.get(user_id)
03

安全性与效率

安全性

  1. 密码加密:使用SHA-256算法对密码进行加密存储,防止密码泄露
  2. 防止SQL注入:使用参数化查询或ORM(如SQLAlchemy)来防止SQL注入攻击
  3. 防止XSS攻击:对用户输入进行转义处理,防止跨站脚本攻击

效率

  1. 轻量级框架:Flask作为一个轻量级框架,启动速度快,资源占用低
  2. SQLite性能:SQLite在处理小型数据集时性能优异,适合用于原型开发和小型项目
04

完整代码示例

以下是一个使用Flask和SQLite实现的简单登录系统的完整代码示例:

from flask import Flask, render_template, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
login_manager = LoginManager(app)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

    def set_password(self, password):
        self.password = generate_password_hash(password, method='sha256')

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

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

@app.route("/register", methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        hashed_password = generate_password_hash(form.password.data, method='sha256')
        user = User(username=form.username.data, password=hashed_password)
        db.session.add(user)
        db.session.commit()
        flash('Your account has been created! You are now able to log in', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', title='Register', form=form)

@app.route("/login", methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user and user.check_password(form.password.data):
            login_user(user)
            return redirect(url_for('home'))
        else:
            flash('Login Unsuccessful. Please check username and password', 'danger')
    return render_template('login.html', title='Login', form=form)

@app.route("/logout")
@login_required
def logout():
    logout_user()
    return redirect(url_for('home'))

if __name__ == '__main__':
    app.run(debug=True)

通过以上步骤,你可以轻松搭建一个既安全又高效的登录系统。Flask和SQLite的组合不仅开发快速,而且能够满足大多数小型项目的需求。希望本文能帮助你更好地理解和实现登录系统的核心功能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号