Flask + MongoDB极简登录示例代码

基本原理

这段代码是一个使用Flask框架的简单登录和注册系统。它使用了Flask-PyMongo扩展来连接MongoDB数据库,Flask-Login扩展来处理用户认证。以下是代码的主要部分:

  1. 导入所需的库和模块。
  2. 初始化Flask应用,配置MongoDB连接和Flask-Login。
  3. 定义User类,用于表示用户。
  4. 定义路由和视图函数,处理主页、注册、登录、注销和受保护页面的请求。
  5. 定义user_loader函数,用于从用户ID加载用户对象。
  6. 如果是主模块,运行Flask应用。

示例代码

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

app = Flask(__name__)
load_dotenv()
app.config["MONGO_URI"] = f"mongodb+srv://intumu.com:{os.getenv('config_MONGO_URI')}@intumu.com/user"
app.secret_key = os.getenv('app_secret_key')
mongo = PyMongo(app)
login_manager = LoginManager()
login_manager.init_app(app)

class User(UserMixin):
    pass

@app.route("/")
def home_page():
    return render_template("home.html",current_user=current_user)

@app.route("/register", methods=['GET', 'POST'])
def register_page():
    error_message = ""
    if request.method == 'POST':
        email = request.form['email']
        username = request.form['username']
        password = request.form['password']
        existing_email = mongo.db.user.find_one({'email': email})
        existing_username = mongo.db.user.find_one({'username': username})
        if existing_email:
            error_message += "\nEmail already exists!"
        if existing_username:
            error_message += "\nUsername already exists!"
        if not existing_email and not existing_username:
            user = {'email': email, 'username': username, 'password': password}
            mongo.db.user.insert_one(user)
            return redirect(url_for('login_page'))
    return render_template("register.html",error_message=error_message,current_user=current_user)

@app.route("/login", methods=['GET','POST'])
def login_page():
    error_message = ""
    if request.method == 'POST':
        if current_user.is_active: 
            return 'has logined'
        username = request.form['username']
        password = request.form['password']
        user_find = mongo.db.user.find_one({'username': username})
        if user_find and user_find['password']==password:
            user = User()  
            user.id = username 
            login_user(user)   
            return render_template("home.html",current_user=current_user)
        elif user_find:
            error_message = '\nWrong password'
        else:
            error_message = "\nUnknown username"
        return render_template("login.html",error_message=error_message,current_user=current_user)
    return render_template("login.html")

@login_manager.user_loader  
def user_loader(username):  
    user = User()  
    user.id = username
    return user 

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


@app.route('/protected')  
@login_required  # intumu.com
def protected_page():  
    if current_user.is_active:  
        return 'Logged in as: ' + current_user.id + 'Login is_active:True'

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

注意事项

  1. 在运行此代码之前,请确保已安装所有必需的库和模块,并正确配置MongoDB连接。
  2. 为了安全起见,不要在代码中直接存储敏感信息,如数据库连接字符串和密钥。在这个例子中,我们使用了Python的dotenv库来加载环境变量。
  3. 在生产环境中,不要使用Flask的默认开发服务器,而应该使用更强大的WSGI服务器,如Gunicorn或uWSGI。
  4. 在处理用户输入时,始终要注意防止SQL注入和其他安全漏洞。在这个例子中,我们使用了MongoDB的查询方法,它已经自动处理了这些问题。

civilpy:Python数据分析及可视化实例目录942 赞同 · 36 评论文章​编辑

相关推荐
第九序言T6 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Java后端的Ai之路6 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
qq_426003966 小时前
UI自动化高频次登录login限流解决方案
python·ui·自动化
Sakura_j_h_7 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
quantdash_cc8 小时前
如何验证历史行情的交易日期是否完整覆盖研究区间?
python·数据分析·pandas·量化交易·股票数据·quantdash
I Am a robert girl8 小时前
当智能体学会“串通”:从长程交互中读懂涌现式合谋
python·多智能体系统·多智能体协作·llm agent·涌现式合谋·对齐问题·激励机制设计
云和数据.ChenGuang9 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
专注仿真9 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
wflynn10 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
2601_9679801110 小时前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包