使用 Flask 连接数据库和用户登录功能进行数据库的CRUD

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用 Flask 连接数据库和用户登录功能进行数据库的CRUD

使用 Flask 连接数据库和用户登录功能进行数据库的CRUD


简介:


在 Web 应用中,连接数据库是一项基本任务,而用户登录功能是很多应用的核心部分。本文将演示如何使用 Flask 框架连接数据库,并实现一个简单的用户登录功能。将创建一个名为 user 的数据库表,其中包含账号、密码和名字字段。还将实现一个登录页面,以及登录成功后跳转到的页面,显示用户姓名。


Flask项目创建参考这篇文章:通过命令行的方式快速创建一个flask项目


准备工作


首先,确保您已经安装了 Flask 和 SQLAlchemy,以及 MySQL 数据库。还需要安装 MySQL 的 Python 连接器,例如 pymysql。如果后面还报错,需要安装啥别的直接使用pip指令安装就可以了。

pip install Flask SQLAlchemy pymysql Flask-SQLAlchemy

  • 创建数据库
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(80) UNIQUE NOT NULL,
    password VARCHAR(80) NOT NULL,
    name VARCHAR(80) NOT NULL
);


创建 Flask 应用


创建一个名为 app.py 的 Python 文件,并编写以下代码:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, validators

app = Flask(__name__)

# 配置数据库连接信息和密钥
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/db_name'
app.config['SECRET_KEY'] = 'dsadsadjldajidsoajid'

# 创建数据库实例
db = SQLAlchemy(app)

# 定义用户模型类
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(80), nullable=False)
    name = db.Column(db.String(80), nullable=False)

# 定义登录表单
class LoginForm(FlaskForm):
    username = StringField('Username', validators=[validators.DataRequired()])
    password = PasswordField('Password', validators=[validators.DataRequired()])
    submit = SubmitField('Login')

# 登录页面
@app.route('/', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    message = None
    if form.validate_on_submit():  # 当提交表单且验证通过时
        # 在数据库中查找用户
        user = User.query.filter_by(username=form.username.data, password=form.password.data).first()
        if user:  # 如果找到用户
            # 渲染成功页面模板,并传递用户名作为参数
            return render_template('success.html', username=user.username)
        else:
            message = 'Invalid username or password'
    # 渲染登录页面模板,并传递表单对象和消息
    return render_template('login.html', form=form, message=message)

# 添加用户
@app.route('/add_user', methods=['POST'])
def add_user():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        name = request.form['name']
        new_user = User(username=username, password=password, name=name)
        db.session.add(new_user)
        db.session.commit()
        return render_template('login.html')

# 删除用户
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
    user = User.query.get_or_404(user_id)
    db.session.delete(user)
    db.session.commit()
    return render_template('login.html')

# 编辑用户
@app.route('/edit_user/<int:user_id>', methods=['GET', 'POST'])
def edit_user(user_id):
    user = User.query.get_or_404(user_id)
    if request.method == 'POST':
        user.username = request.form['username']
        user.password = request.form['password']
        user.name = request.form['name']
        db.session.commit()
        return render_template('login.html')
    return render_template('edit_user.html', user=user)

# 查询用户
@app.route('/users')
def get_users():
    users = User.query.all()
    return render_template('users.html', users=users)

if __name__ == '__main__':
    # 在应用上下文中创建所有数据库表
    with app.app_context():
        # 创建所有数据库表
        db.create_all()
        # 打印数据库连接成功信息
        print("Database connection successful!")
    # 启动 Flask 应用
    app.run(debug=True)


  • 数据库密码的填写演示

模板是这样的mysql+pymysql://username:password@localhost/db_name

我的账号密码如果是root,123456 那么就这样写

mysql+pymysql://root:123456@localhost/db_name


  • 在 app.config[‘SECRET_KEY’] 中,您可以填写一个用于 Flask 应用的密钥,以确保安全性。这个密钥可以是任何随机字符串,用于加密会话数据等。例如:

app.config['SECRET_KEY'] = 'dsadsadjldajidsoajid'

  • 首先调试一下代码是否可以正常运行,可以正常启动,而且数据库连接成功了。


创建前端模板文件


以下是代码中所需的完整前端文件,他们放在templates文件夹中,包括登录页面(login.html)、成功页面(success.html)、编辑用户页面(edit_user.html)、用户列表页面(users.html):


login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="POST" action="/">
        {{ form.hidden_tag() }}
        <p>{{ form.username.label }}<br>{{ form.username(size=32) }}</p>
        <p>{{ form.password.label }}<br>{{ form.password(size=32) }}</p>
        <p>{{ form.submit() }}</p>
    </form>
</body>
</html>


success.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login Success</title>
</head>
<body>
    <h1>Welcome, {{ username }}</h1>
    <p>You have successfully logged in.</p>
</body>
</html>


edit_user.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit User</title>
</head>
<body>
    <h1>Edit User</h1>
    <form method="POST" action="/edit_user/{{ user.id }}">
        <p>Username: <input type="text" name="username" value="{{ user.username }}"></p>
        <p>Password: <input type="password" name="password" value="{{ user.password }}"></p>
        <p>Name: <input type="text" name="name" value="{{ user.name }}"></p>
        <p><input type="submit" value="Submit"></p>
    </form>
</body>
</html>


users.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <ul>
        {% for user in users %}
        <li>{{ user.username }} - {{ user.name }} <a href="/edit_user/{{ user.id }}">Edit</a></li>
        {% endfor %}
    </ul>
</body>
</html>


这些模板文件包含了登录、成功、编辑用户和用户列表页面的基本结构和表单。

  • 运行结果展示

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
NoSQL Shell MongoDB
NoSQL数据使用指令和引擎连接数据库实例
【5月更文挑战第8天】本文介绍了MongoDB的本地使用和常用操作,包括通过mongo shell连接数据库、显示数据库和集合,以及副本集设置。最后提到了MongoDB的日志功能和顶点集的使用,如capped collection的创建和管理。
18 3
|
2天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
4天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
24 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
4天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
4天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
前端开发 Python 数据库
Flask blueprint蓝图按功能模块化架构实例 推荐
使用flask作为开发框架,一定要按功能模块化,否则到了后面项目越大,开发速度就越慢。 1、Flask模块化结构规划 [root@yang-218?yangyun]#?tree . ├──?asset???????????????#资产功能目录 │???├──?__init__.
1189 0
|
4天前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【4月更文挑战第9天】本文介绍了如何使用Python的Flask框架构建RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。首先,确保安装了Python和Flask,然后通过创建基本的Flask应用开始。接着,定义资源和路由,例如为“图书”资源创建GET、POST、PUT和DELETE方法的路由。使用`request`对象处理客户端数据,`jsonify`生成JSON响应。错误处理通过返回错误信息和相应HTTP状态码完成。最后,运行并测试API,发现Flask提供了一种简单高效的方式来构建RESTful APIs。
|
4天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
29 1
|
4天前
|
存储 缓存 监控
利用Python和Flask构建RESTful API的实战指南
在当今的软件开发中,RESTful API已成为前后端分离架构中的核心组件。本文将带你走进实战,通过Python的Flask框架,一步步构建出高效、安全的RESTful API。我们将从项目初始化、路由设置、数据验证、错误处理到API文档生成,全方位地探讨如何构建RESTful API,并给出一些实用的最佳实践和优化建议。
http://www.vxiaotou.com