Flask + MySQL如何实现用户注册,登录和登出的项目实践

Flask是一款轻量级的Web框架,非常方便快捷。MySQL则是一款常用的数据库,两者结合可以实现很多有趣的项目。本文将介绍如何使用Flask和MySQL实现用户注册、登录和登出功能的项目实践。

准备工作

在开始项目之前,我们需要准备一些工具和环境:

  • Python环境:Flask是Python编写的Web框架,我们首先需要安装Python环境。
  • Flask框架:我们需要安装Flask框架,可以通过pip命令进行安装:pip install flask
  • MySQL数据库:我们需要安装MySQL数据库,并创建数据库和数据表以存储用户信息。
  • PyMySQL库:我们需要使用PyMySQL库来连接并操作MySQL数据库,可以通过pip命令进行安装:pip install pymysql

用户注册

用户注册功能是项目的第一步,我们需要先实现它。以下是Flask + MySQL实现用户注册的方法:

创建注册页面模板(register.html)

我们先创建一个包含注册表单的HTML文件,用于显示注册页面。可以使用Flask自带的Jinja2模板引擎渲染页面。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>用户注册</title>
</head>
<body>
  <h1>用户注册</h1>
  <form method="POST" action="{{ url_for('register') }}">
    <p>
      <label>用户名: <input type="text" name="username"></label>
    </p>
    <p>
      <label>密码: <input type="password" name="password"></label>
    </p>
    <p>
      <input type="submit" value="提交">
    </p>
  </form>
</body>
</html>

该页面包含一个用户名和密码的表单,当用户点击提交按钮时,会将表单数据提交给服务器的/register路由。

创建注册路由(/register)

接下来我们需要创建一个/register的路由,用于处理用户提交的表单数据并将其存储到数据库中。以下是实现代码:

from flask import Flask, render_template, request, redirect, url_for
import pymysql

app = Flask(__name__)

# 数据库连接信息
db_config = {
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': 'password',
    'db': 'testdb'
}

# 注册路由
@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    else:
        username = request.form['username']
        password = request.form['password']
        conn = pymysql.connect(**db_config)
        cursor = conn.cursor()
        try:
            # 判断用户名是否已存在
            sql = """SELECT * FROM users WHERE username=%s"""
            cursor.execute(sql, (username,))
            result = cursor.fetchone()
            if result:
                return "用户名已存在,请重新输入"
            # 插入用户数据
            sql = """INSERT INTO users (username, password) VALUES (%s, %s)"""
            cursor.execute(sql, (username, password))
            conn.commit()
            return "注册成功"
        except:
            conn.rollback()
            return "注册失败"
        finally:
            cursor.close()
            conn.close()

当用户提交表单时,我们通过request.form获取表单数据,然后连接MySQL数据库,根据用户名判断该用户是否已经存在,如果不存在则将用户数据插入数据库中。

运行应用程序

现在我们已经完成了用户注册功能,可以运行应用程序并打开网址http://localhost:5000/register进行测试。

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

用户登录

用户登录是项目的第二步,我们需要让用户输入用户名和密码,并验证其登录信息。以下是Flask + MySQL实现用户登录的方法:

创建登录页面模板(login.html)

我们先创建一个包含登录表单的HTML文件,用于显示登录页面。可以使用Flask自带的Jinja2模板引擎渲染页面。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>用户登录</title>
</head>
<body>
  <h1>用户登录</h1>
  <form method="POST" action="{{ url_for('login') }}">
    <p>
      <label>用户名: <input type="text" name="username"></label>
    </p>
    <p>
      <label>密码: <input type="password" name="password"></label>
    </p>
    <p>
      <input type="submit" value="提交">
    </p>
  </form>
</body>
</html>

该页面包含一个用户名和密码的表单,当用户点击提交按钮时,会将表单数据提交给服务器的/login路由。

创建登录路由(/login)

接下来我们需要创建一个/login的路由,用于验证用户提交的表单数据是否正确。以下是实现代码:

# 登录路由
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        username = request.form['username']
        password = request.form['password']
        conn = pymysql.connect(**db_config)
        cursor = conn.cursor()
        try:
            # 查询用户数据
            sql = """SELECT * FROM users WHERE username=%s AND password=%s"""
            cursor.execute(sql, (username, password))
            result = cursor.fetchone()
            if result:
                # 验证通过,设置用户会话
                session['username'] = username
                return redirect(url_for('index'))
            else:
                return "用户名或密码错误"
        except:
            return "登录失败"
        finally:
            cursor.close()
            conn.close()

当用户提交表单时,我们通过request.form获取表单数据,然后连接MySQL数据库,根据用户名和密码查询用户数据。如果查询结果存在,则表示验证通过,设置用户会话并将页面重定向到首页;如果查询结果不存在,则表示验证失败,显示错误信息。

创建会话

我们需要使用Flask内置的session来管理用户会话。需要提前设置一个密钥app.secret_key,否则会抛出异常。

app.secret_key = 'my_secret_key'

定义首页(/)

我们需要定义一个首页,用于检查用户是否已经登录。以下是实现代码:

# 主页路由
@app.route('/')
def index():
    username = session.get('username')
    if username is not None:
        return "欢迎 " + username + " 登录"
    else:
        return redirect(url_for('login'))

该路由会检查当前用户是否已经登录。如果已经登录,则显示欢迎页面,否则将页面重定向到登录页面。

运行应用程序

现在我们已经完成了用户登录功能,可以运行应用程序并打开网址http://localhost:5000/login进行测试。

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

用户登出

用户登出是项目的最后一步,我们需要让用户退出登录,并清除用户会话。以下是Flask + MySQL实现用户登出的方法:

创建登出路由(/logout)

我们需要创建一个/logout的路由,用于清除用户会话。以下是实现代码:

# 退出登录路由
@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('login'))

该路由会清除用户会话,并将页面重定向到登录页面。

修改首页

我们需要修改首页,添加一个退出登录的链接。以下是实现代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>首页</title>
</head>
<body>
  {% if username %}
    <h1>欢迎 {{ username }} 登录</h1>
    <p><a href="{{ url_for('logout') }}">退出登录</a></p>
  {% else %}
    <p>请先 <a href="{{ url_for('login') }}">登录</a></p>
  {% endif %}
</body>
</html>

该页面会根据用户是否已经登录,动态显示不同内容。如果用户已经登录,则显示欢迎信息和退出登录链接;否则显示提示信息和登录链接。

运行应用程序

现在我们已经完成了用户登出功能,可以运行应用程序并打开网址http://localhost:5000/进行测试。

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

到这里,我们已经完成了Flask + MySQL实现用户注册、登录和登出的项目实践。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask + MySQL如何实现用户注册,登录和登出的项目实践 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • flask框架路由常用定义方式总结

    让我为你详细讲解一下“flask框架路由常用定义方式总结”的完整攻略。 什么是flask框架? Flask是一个基于 Python 语言的轻量级 Web 开发框架,使用 Werkzeug 作为 Web 服务器网关接口,使用 Jinja2 模板引擎,这两个库也都是 Flask 标配。它设计精简,易于扩展,使它成为很多 Web 开发者喜欢使用的框架之一。 什么是…

    Flask 2023年5月15日
    00
  • flask框架使用orm连接数据库的方法示例

    当使用 Flask 框架时,ORM(对象关系映射)是连接数据库的一个好选择。 SQLAlchemy 是一个流行的 ORM 库,它提供了方便的 ORM 接口,可以让我们更轻松地在 Flask 中使用数据库。 下面我们来讲解一下 Flask 框架使用 ORM 连接数据库的方法示例。 环境设置 在使用 Flask 和 SQLAlchemy 之前,我们需要安装 Py…

    Flask 2023年5月15日
    00
  • python框架中flask知识点总结

    下面我将为您详细讲解“python框架中flask知识点总结”的完整攻略。 什么是Flask? Flask是一个基于Python的轻量级Web应用框架,由Armin Ronacher在2010年创建。Flask的核心是Werkzeug和Jinja2,Werkzeug负责提供Web应用的基本结构,Jinja2则负责模板渲染。 Flask的优点 Flask具有以…

    Flask 2023年5月15日
    00
  • 使用 prometheus python 库编写自定义指标的方法(完整代码)

    以下是详细讲解“使用 prometheus python 库编写自定义指标的方法(完整代码)”的攻略,包含两条示例说明。 1. 引言 Prometheus 是一种流行的开源监控系统,使用一种基于 HTTP/HTTPS 协议的 pull 模型,从被监控服务中收集指标数据。Prometheus Python 库是一种使用 Python 语言编写的 Prometh…

    Flask 2023年5月16日
    00
  • flask框架中勾子函数的使用详解

    现在我将为您详细讲解“flask框架中勾子函数的使用详解”的完整攻略,包含两条示例说明。以下是完整攻略: 什么是勾子函数 勾子函数(Hook Function),也叫回调函数(Callback Function),指的是在程序执行不同阶段,程序员预先设定并注册的、可以被主程序调用执行的函数。在 Flask 框架中,所有与请求和响应相关的操作都与 Reques…

    Flask 2023年5月15日
    00
  • Docker Compose多容器部署的实现

    Docker Compose是一个强大的工具,可以在多个Docker容器之间协调并维护关系,实现复杂的应用程序部署。本攻略将介绍如何使用Docker Compose完成多容器部署。 步骤1:创建Docker Compose文件 首先,我们需要在本地创建一个名为docker-compose.yml的文件。这个文件将包含我们所有需要部署的Docker容器的配置。…

    Flask 2023年5月16日
    00
  • python使用Flask操作mysql实现登录功能

    下面是使用Flask操作mysql实现登录功能的完整攻略。 1. 安装依赖 首先需要安装Flask和MySQL驱动。可以使用以下命令安装: pip install flask pymysql 2. 创建数据库 在MySQL中创建一个名为user的数据库,然后在该数据库中创建一个名为user_info的表。 CREATE DATABASE user; USE …

    Flask 2023年5月15日
    00
  • Flask web上传获取图像Image读取并使用方式

    下面我将详细讲解 Flask web上传获取图像Image读取并使用方式的完整攻略,包含两条示例说明。 Flask Web上传获取图像并读取 在 Flask Web 应用程序中,最简单的上传图像的方法就是使用 Python 的 werkzeug 库中的 FileStorage 对象。可以在 HTML 表单中添加 file 类型的 input,然后在 Flas…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部