【无标题】Flask+SQLAlchemy完成简单的登录注册网页(python)

首先创建一个users表

main.py

from flask import Flask, render_template, redirect, request, session
from flask_sqlalchemy import SQLAlchemy

# 创建 Flask 应用程序
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secretkey'  # 设置一个用于加密 session 数据的密钥
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'  # SQLite 数据库文件路径
# 创建 SQLAlchemy 对象
db = SQLAlchemy(app)


# 用户数据模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(100), nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'


# 设置应用上下文
with app.app_context():
    # 创建数据库表
    db.create_all()

# 路由:主页
@app.route('/')
def index():
    if 'username' in session:
        return f'已登录,用户名:{session["username"]}'
    return '未登录'


# 路由:登录
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User.query.filter_by(username=username, password=password).first()
        if user:
            session['username'] = username
            return redirect('/')
        else:
            return '登录失败'
    return render_template('login.html')


# 路由:注销
@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect('/')

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

        # 检查用户名是否已存在
        if User.query.filter_by(username=username).first():
            return '该用户名已被注册'

        # 创建新用户
        new_user = User(username=username, password=password)
        db.session.add(new_user)
        db.session.commit()

        return '注册成功'

    return render_template('register.html')

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

login.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <style>
        body {
            background-color: #f1f1f1;
            font-family: Arial, sans-serif;
        }

        h1 {
            color: #333;
            background-color: #f9f9f9;
            padding: 10px;
            border-radius: 5px;
        }

        p {
            font-size: 16px;
            line-height: 1.5;
        }

        .container {
            width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #fff;
            box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }

        button {
            background-color: #4CAF50;
            color: #fff;
            padding: 10px 20px;
            font-size: 18px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s ease-in-out;
        }

        button:hover {
            background-color: #45a049;
        }
    </style>
</head>
<body>
    <div class="container">
    <h1>登录</h1>
    <form method="POST">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>

        <input type="submit" value="登录"><br><br>
        <a href="http://127.0.0.1:5000/register">注册</a>
    </form>
    </div>
</body>
</html>

register.py

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>注册</title>
     <style>
        body {
            background-color: #f1f1f1;
            font-family: Arial, sans-serif;
        }

        h1 {
            color: #333;
            background-color: #f9f9f9;
            padding: 10px;
            border-radius: 5px;
        }

        p {
            font-size: 16px;
            line-height: 1.5;
        }

        .container {
            width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #fff;
            box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }

        button {
            background-color: #4CAF50;
            color: #fff;
            padding: 10px 20px;
            font-size: 18px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s ease-in-out;
        }

        button:hover {
            background-color: #45a049;
        }
    </style>
</head>
<body>
    <div class="container">
    <h1>注册</h1>
    <form method="POST">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>

        <input type="submit" value="注册">
    </form>
    </div>
</body>
</html>

代码文件如下:

 运行结果如下:

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值