用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
系统设计
用户注册模块
用户注册是登录系统的第一个环节,需要实现以下功能:
- 表单验证:确保用户输入的用户名和密码符合要求
- 数据存储:将用户信息安全地存储到数据库中
使用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')
登录验证模块
登录验证模块需要实现以下功能:
- 验证用户输入的用户名和密码是否正确
- 管理用户会话,保持用户登录状态
使用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
安全性与效率
安全性
- 密码加密:使用SHA-256算法对密码进行加密存储,防止密码泄露
- 防止SQL注入:使用参数化查询或ORM(如SQLAlchemy)来防止SQL注入攻击
- 防止XSS攻击:对用户输入进行转义处理,防止跨站脚本攻击
效率
- 轻量级框架:Flask作为一个轻量级框架,启动速度快,资源占用低
- 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的组合不仅开发快速,而且能够满足大多数小型项目的需求。希望本文能帮助你更好地理解和实现登录系统的核心功能。
热门推荐
周宝丽:让茂南单人木偶戏“活”起来
专家解读:如何通过语言教育破解聋哑人社交困境
聋哑人的社交困境:如何跨越心理障碍?
聋人文化的社交挑战:手语的力量
提供情绪价值:让感情更稳固的秘诀
《消失的她》揭示的情绪价值:如何提升心理健康
烤瓷牙能用多少年寿命
根管治疗后牙齿敲击会痛?了解治疗后可能出现的症状
真相!根管治疗后的牙齿早晚要拔?成功根管的牙齿不需要,失败或再次感染可能要拔掉!
牡丹籽油:92%不饱和脂肪酸,心血管健康的理想之选
橄榄油和茶籽油,谁更适合你的厨房?
廉颇:战国名将的军事智慧与领导力
《战狼3》上映:军事文学的新篇章?
智能冰箱有哪些实用的功能?
智能液晶电视出现故障时,应如何快速诊断和修复?
智能温控风扇设计:基于STC89C52单片机的温控风扇系统
小鱼儿教你在家轻松做出米其林级披萨!
天草纲目:什么是糖尿病肾病?该如何防治?
中国人民公安大学:公安学类专业的宝藏选择!
春节回家过年,年轻人为何不感冒?
做完前牙根管治疗后,第二天就可以吃火锅了?
耶稣基督的救赎之路:从受难到复活
黄裕生:从哲学角度看基督教教义
延长老年人健康寿命的多重因素与心理干预的影响
地理、历史与潮汕文化
云南丽江旅游必吃(丽江好吃的推荐)
急性髓系白血病患者获新生机!新药Revumenib让多名患者癌细胞降至不可检测!
避免吵架最好的办法,其实是“学会吵架”
墙上双面胶怎么快速去除
蓝莓派新做法:整颗柠檬让派馅更美味