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 osapp = 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 = usernamereturn 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 评论文章​编辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IJKPLAYER源码分析-iOS端显示

1 简介 1.1 EAGL(Embedded Apple Graphics Library) 与Android系统使用EGL连接OpenGL ES与原生窗口进行surface输出类似,iOS则用EAGL将CAEAGLLayer作为OpenGL ES输出目标。 与 Android EGL 不同的是,iOS EAGL 不会让应用直接向 BackendFrameBuffer 和 F…

KKVIEW远程远程访问家里电脑

远程访问家里电脑:简易指南与价值所在 在数字化时代,电脑已成为我们日常生活和工作中不可或缺的工具。有时,我们可能在外出时急需访问家中电脑里的某个文件或应用,这时,远程访问家里电脑就显得尤为重要。本文将简要介…

微服务-7 Docker

一、镜像、容器、仓库 容器是镜像的实例,仓库中存储着镜像。 二、镜像的操作 三、容器的操作 创建容器停止容器,查看后发现没有了(docker ps 默认只展示没有停止的) docker ps -a (可以展示运行中和停止的镜像)删除容器:(docker rm 不能删除…

【LeetCode刷题日记】1716

Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。 最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。 给你 n ,请你返回在第…

长短时记忆网络(LSTM)

1. 理解RNN及其局限性 基础知识:首先,你需要了解RNN的基本概念和工作原理,包括它是如何通过时间步处理序列数据的。局限性:掌握RNN面临的主要挑战,特别是梯度消失和梯度爆炸问题,以及这些问题为什么会影响…

提升写作效率:掌握ChatGPT论文写作技巧

ChatGPT无限次数:点击直达 html 提升写作效率:掌握ChatGPT论文写作技巧 在科技的快速发展下,人工智能技术已经逐渐渗透到各行各业中。在学术领域,论文写作是一项重要且耗时的工作,而ChatGPT这样的人工智能工具可以帮助研究人员…

【C++之list的应用及模拟实现】

C学习笔记---012 C之list的应用及模拟实现1、list的简单介绍2、list的应用2.1、构造函数push_back迭代器遍历2.2、reverse逆置sort排序unique去重2.3、splice粘接/转移2.4、merge合并remove_if条件删除函数remove指定元素删除2.5、排序 -- 效率比较 3、list深度剖析及模拟实现3…

Spring Data 2021.1 (Q)升级说明

Spring Data 2021.1 (Q) Release Notes Spring Data Commons—2.6版本 1、域模型现jMolecules增加了Identity注解 2、QuerydslPredicateExecutor、QueryByExampleExecutor 及其响应式变体为 Spring Data 提供了强大的查询构建能力。它们允许你以更灵活和动态的方式定义查询&…

python维护代理ip的实现

前言: Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。 代理IP的作用是可以为爬虫提供多个IP地址,从而加快其爬取数据的速度,同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和…

突破界限 千视将在 NAB 2024 展会上展示领先的 AV over IP 技术

突破界限!千视将在 NAB 2024 展会上展示领先的 AV over IP技术 作为AV over IP领域的先驱者,Kiloview将于2024年4月14日至17日在NAB展会(展台号:SU6029)隆重登场,展示我们领先业界的AV over IP产品、解决方…

【问题】解决1130-Host‘ ‘is not allowed to connect to this MySQL 本地无法连接服务器的数据库

【问题】解决1130-Host‘ ‘is not allowed to connect to this MySQL 本地无法连接服务器的数据库 原因: 默认mysql只允许 localhost 本地访问数据库, 解决方法 将 localhost 改为 % 所有 第一步 回车 输入密码 mysql -u root -p 第二步 切换数据库 use mysql 第三步 更新所…

Day96:云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸

目录 云原生-Docker安全-容器逃逸&系统内核漏洞 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE-2019-5736 runC容器逃逸(需要管理员配合触发) CVE-2020-15257 containerd逃逸(启动容器时有前提参数) 云原生-Docker安全-容器逃逸&CDK自动化 知识点&#xff1…

Ubuntu下配置Android NDK环境

Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件(即解压) ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK,还需要进行环境变量…

GitHub repository - Code - Issues - Pull Requests - Wiki

GitHub repository - Code - Issues - Pull Requests - Wiki 1. Code2. Issues3. Pull Requests4. WikiReferences 1. Code 显示该仓库中的文件列表。仓库名下方是该仓库的简单说明和 URL. 2. Issues 用于 BUG 报告、功能添加、方向性讨论等,将这些以 Issue 形式进…

less+rem适配+媒体查询布局(主流)

rem适配布局 一.rem基础二.媒体查询1.概念2.语法(1).mediatype查询类型(2).关键字(3).媒体特性(4).应用 3.媒体查询rem实现元素动态大小变化4.引入资源(针对不同媒体查询…

C语言如何初始化指针?

一、问题 如何初始化指针?只有初始化的指针才可以使⽤,这个与普通变量没有区别。 二、解答 定义指针变量之后,必须为其赋具体的值,⽽且指针变量的赋值只能赋予地址,绝对不可以是其他数据,并且要注意数据类…

JSONP是跨域资源共享的古老技术吗

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

JSON(JavaScript Object Notation)

目录 是什么 为什么会设计json 数据结构 数据类型 字符串(String) 数字(Number) 对象(Object) 数组(Array) 布尔值(Boolean) null 基本结构 对象…

前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发,相比于单体项目容易产生跨域问题。 一、跨域问题CORS 1.什么是跨域问题? 后端接收到请求并返回结果了,浏览器把这个响应拦截了。 2.跨域问题是怎么产生的? 浏览器基于同源…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立,彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口,等待Broker、Producer、Consumer连接, 相当于一个路由控制中心。主要是用来保存topic路由信息&#…