📜  使用 Flask 和 MySQL 的登录和注册项目(1)

📅  最后修改于: 2023-12-03 15:06:46.362000             🧑  作者: Mango

使用 Flask 和 MySQL 的登录和注册项目

本项目使用 Flask 和 MySQL 构建一个简单的登录和注册系统。用户可以在网页上输入用户名和密码进行注册和登录。

技术栈
  • Python 3.7
  • Flask 1.1.2
  • MySQL 8.0
准备工作

在开始之前,你需要确保已经安装了 Python 3.7 和 MySQL 8.0,并创建了一个数据库用于存储用户信息。在本项目中,我们使用了 Flask-MySQLdb 扩展来连接数据库。

安装 Flask 和 MySQLdb:

pip install Flask
pip install Flask-MySQLdb
创建数据库

在 MySQL 中创建名为 users 的数据库,并创建一个名为 users 的表,用于存储用户信息。

CREATE TABLE users (
    id INT(11) NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    PRIMARY KEY (id)
);
实现登录和注册

1.引入扩展和创建 Flask 应用对象

from flask import Flask, render_template, request, redirect, url_for
from flask_mysqldb import MySQL

app = Flask(__name__)

# MySQL 配置
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = '123456'
app.config['MYSQL_DB'] = 'users'

mysql = MySQL(app)

2.实现注册功能

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST' and 'username' in request.form and 'password' in request.form:
        username = request.form['username']
        password = request.form['password']

        cur = mysql.connection.cursor()
        cur.execute('SELECT * FROM users WHERE username = %s', (username,))
        user = cur.fetchone()

        if user:
            error = '用户名已存在'
            return render_template('register.html', error=error)
        else:
            cur.execute('INSERT INTO users(username, password) VALUES(%s, %s)', (username, password))
            mysql.connection.commit()
            success = '注册成功'
            return render_template('register.html', success=success)

    return render_template('register.html')

3.实现登录功能

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST' and 'username' in request.form and 'password' in request.form:
        username = request.form['username']
        password = request.form['password']

        cur = mysql.connection.cursor()
        cur.execute('SELECT * FROM users WHERE username = %s AND password = %s', (username, password))
        user = cur.fetchone()

        if user:
            return redirect(url_for('home'))
        else:
            error = '用户名或密码不正确'
            return render_template('login.html', error=error)

    return render_template('login.html')
创建模板

在项目目录下创建 templates 文件夹,在其中创建 login.htmlregister.html 两个模板,用于显示登录和注册页面。

login.html:

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
</head>
<body>
    {% if error %}
    <p>{{ error }}</p>
    {% endif %}
    <h1>登录</h1>
    <form action="{{ url_for('login') }}" method="POST">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" name="submit" value="登录">
    </form>
</body>
</html>

register.html:

<!DOCTYPE html>
<html>
<head>
    <title>注册</title>
</head>
<body>
    {% if error %}
    <p>{{ error }}</p>
    {% endif %}
    {% if success %}
    <p>{{ success }}</p>
    {% endif %}
    <h1>注册</h1>
    <form action="{{ url_for('register') }}" method="POST">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" name="submit" value="注册">
    </form>
</body>
</html>
运行应用

在控制台输入以下命令启动应用:

python app.py

打开浏览器,在 URL 中输入 http://localhost:5000/login 即可访问登录页面,输入 http://localhost:5000/register 访问注册页面。