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