使用Python构建一个简单的Web应用:Flask + MySQL 实战

昨天 4阅读

在现代软件开发中,Web 应用程序扮演着极其重要的角色。无论是企业管理系统、社交平台还是电商平台,Web 技术都无处不在。本文将介绍如何使用 Python 的 Flask 框架和 MySQL 数据库来构建一个简单的 Web 应用程序,并通过实际代码演示其完整实现过程。

我们将构建一个“用户注册与登录系统”,包含以下功能:

用户注册用户登录显示所有已注册用户信息

技术栈简介

Flask:轻量级的 Python Web 框架,适合快速搭建小型网站或 API。MySQL:关系型数据库,用于存储用户数据。SQLAlchemy:ORM(对象关系映射)工具,简化数据库操作。Jinja2:Flask 默认使用的模板引擎,用于渲染 HTML 页面。Werkzeug:提供密码哈希功能,增强安全性。

环境准备

1. 安装依赖

pip install flask flask-sqlalchemy flask-wtf pymysql mysqlclient

注意:如果你使用的是 Windows 系统,可能需要安装 mysqlclient 的预编译版本,推荐使用 Unofficial Windows Binaries for Python Extension Packages 来下载对应版本。

2. 创建项目目录结构

flask-mysql-app/│├── app.py├── config.py├── requirements.txt├── templates/│   ├── index.html│   ├── login.html│   └── register.html└── instance/    └── site.db

配置数据库连接

创建 config.py 文件,定义数据库 URI:

import osclass Config:    SECRET_KEY = os.environ.get('SECRET_KEY') or 'your-secret-key'    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://username:password@localhost/flask_users'    SQLALCHEMY_TRACK_MODIFICATIONS = False

替换 usernamepassword 为你本地 MySQL 的用户名和密码。确保你已经创建了名为 flask_users 的数据库。

编写主程序

1. 初始化 Flask 应用

编辑 app.py

from flask import Flask, render_template, redirect, url_for, request, flashfrom flask_sqlalchemy import SQLAlchemyfrom flask_wtf.csrf import CSRFProtectfrom werkzeug.security import generate_password_hash, check_password_hashfrom forms import RegistrationForm, LoginFormapp = Flask(__name__)app.config.from_object('config.Config')db = SQLAlchemy(app)csrf = CSRFProtect(app)class User(db.Model):    id = db.Column(db.Integer, primary_key=True)    username = db.Column(db.String(80), unique=True, nullable=False)    email = db.Column(db.String(120), unique=True, nullable=False)    password_hash = db.Column(db.String(128))    def set_password(self, password):        self.password_hash = generate_password_hash(password)    def check_password(self, password):        return check_password_hash(self.password_hash, password)@app.route('/')def index():    users = User.query.all()    return render_template('index.html', users=users)@app.route('/register', methods=['GET', 'POST'])def register():    form = RegistrationForm()    if form.validate_on_submit():        user = User(username=form.username.data, email=form.email.data)        user.set_password(form.password.data)        db.session.add(user)        db.session.commit()        flash('注册成功!')        return redirect(url_for('index'))    return render_template('register.html', form=form)@app.route('/login', methods=['GET', 'POST'])def login():    form = LoginForm()    if form.validate_on_submit():        user = User.query.filter_by(email=form.email.data).first()        if user and user.check_password(form.password.data):            flash('登录成功!')            return redirect(url_for('index'))        else:            flash('邮箱或密码错误!')    return render_template('login.html', form=form)if __name__ == '__main__':    with app.app_context():        db.create_all()    app.run(debug=True)

2. 表单类定义

新建 forms.py

from flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitFieldfrom wtforms.validators import DataRequired, Email, EqualTo, Lengthclass RegistrationForm(FlaskForm):    username = StringField('用户名', validators=[DataRequired(), Length(min=4, max=25)])    email = StringField('邮箱', validators=[DataRequired(), Email()])    password = PasswordField('密码', validators=[DataRequired(), Length(min=6)])    confirm = PasswordField('确认密码', validators=[DataRequired(), EqualTo('password')])    submit = SubmitField('注册')class LoginForm(FlaskForm):    email = StringField('邮箱', validators=[DataRequired(), Email()])    password = PasswordField('密码', validators=[DataRequired()])    submit = SubmitField('登录')

前端页面设计

我们使用 Jinja2 模板引擎来渲染 HTML 页面。下面展示三个主要页面的示例。

1. templates/index.html

<!DOCTYPE html><html><head>    <title>用户列表</title></head><body>    <h1>欢迎来到用户中心</h1>    {% with messages = get_flashed_messages() %}        {% if messages %}            {% for message in messages %}                <div>{{ message }}</div>            {% endfor %}        {% endif %}    {% endwith %}    <a href="{{ url_for('register') }}">注册</a> |     <a href="{{ url_for('login') }}">登录</a>    <h3>用户列表</h3>    <ul>        {% for user in users %}            <li>{{ user.username }} - {{ user.email }}</li>        {% endfor %}    </ul></body></html>

2. templates/register.html

<!DOCTYPE html><html><head>    <title>注册</title></head><body>    <h1>注册</h1>    <form method="POST">        {{ form.hidden_tag() }}        {{ form.username.label }} {{ form.username }}        {{ form.email.label }} {{ form.email }}        {{ form.password.label }} {{ form.password }}        {{ form.confirm.label }} {{ form.confirm }}        {{ form.submit }}    </form></body></html>

3. templates/login.html

<!DOCTYPE html><html><head>    <title>登录</title></head><body>    <h1>登录</h1>    <form method="POST">        {{ form.hidden_tag() }}        {{ form.email.label }} {{ form.email }}        {{ form.password.label }} {{ form.password }}        {{ form.submit }}    </form></body></html>

运行与测试

启动 Flask 应用:
python app.py

访问 http://127.0.0.1:5000/

注册新用户并查看是否能正确保存到数据库。

登录后会显示欢迎信息。

查看用户列表是否正确显示。

总结

本文详细介绍了如何使用 Flask 搭建一个具备基本功能的 Web 应用,并结合 MySQL 进行用户数据管理。我们实现了用户注册、登录以及数据展示的基本流程,并展示了前后端交互的关键技术点。

虽然这是一个基础的示例,但它涵盖了 Web 开发中的多个核心概念:

路由定义表单验证数据持久化模板渲染用户认证

你可以在此基础上继续扩展,例如添加用户权限控制、分页显示、RESTful API 接口等功能,进一步提升系统的完整性和实用性。


参考文献:

Flask 官方文档Flask-SQLAlchemy 文档WTForms 官方文档
免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第69584名访客 今日有9篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!