Flask Web 应用与 MongoDB 集成:用户登录和退出

在本文中,我们将探讨如何使用 Flask Web 框架和 MongoDB 数据库构建一个简单的 Web 应用。我们将使用 Flask-PyMongo 扩展来实现 MongoDB 集成,并使用 Flask-Login 扩展来处理用户认证。

1. 安装所需库

首先,我们需要安装 Flask、Flask-PyMongo 和 Flask-Login 扩展:

复制代码
pip install Flask Flask-PyMongo Flask-Login

2. 创建 Flask 应用

接下来,我们将创建一个名为 app.py 的 Flask 应用:

复制代码
from flask import Flask, render_template, request, redirect, url_for
from flask_pymongo import PyMongo
from flask_login import LoginManager, UserMixin, login_user, current_user, login_required, logout_user

app = Flask(__name__)
mongo = PyMongo(app)
login_manager = LoginManager()
login_manager.init_app(app)

3. 定义 User 类

我们将使用 Flask-Login 来处理用户认证。首先,我们需要定义一个 User 类,该类继承自 Flask-Login 的 UserMixin 类:

复制代码
class User(UserMixin):
    pass

4. 用户加载回调

接下来,我们需要定义一个用户加载回调函数,该函数将使用 Flask-Login 的 user_loader 装饰器:

复制代码
@login_manager.user_loader
def user_loader(username):
    user = User()
    user.id = username
    return user

5. 创建登录和注销路由

现在,我们将创建一个登录页面,并使用 Flask-Login 来处理用户登录和注销:

复制代码
@app.route('/login', methods=['GET', 'POST'])
def login_page():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 在此处验证用户凭据
        user = User()
        user.id = username
        login_user(user)
        return redirect(url_for('protected_page'))
    return render_template('login.html')

@app.route('/logout')
def logout_page():
    if current_user.is_active:
        logout_user()
        return 'Logged out'
    else:
        return "you aren't login"

6. 创建受保护的页面

最后,我们将创建一个受保护的页面,该页面仅对登录用户可见:

复制代码
@app.route('/protected_page')
@login_required
def protected_page():
    return 'This is a protected page.'

7. 运行 Flask 应用

现在,我们已经构建了整个 Flask 应用。在命令行中运行以下命令以启动应用:

复制代码
python app.py

应用将在本地主机的 8000 端口上运行。您可以通过访问 /login、/logout 路径来测试登录、退出功能。

相关推荐
callJJ23 分钟前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
小郑加油27 分钟前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦27 分钟前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
.柒宇.35 分钟前
AI掘金头条项目-K8s部署实战教程
python·云原生·容器·kubernetes·fastapi
KuaCpp1 小时前
C++面向对象(速过复习版)
开发语言·c++
观北海1 小时前
从 Sim2Sim 到 Sim2Real:以 ONNX 为核心的机器人策略实机落地全指南
python·机器人
wbs_scy1 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode1 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
iCxhust2 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理
MATLAB代码顾问2 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法