flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序,实现了一个简单的登录系统。以下是代码的详细解释:

  1. 导入必要的模块:`os` 用于生成密钥,`Flask` 用于创建Web应用程序。

  2. 创建Flask应用程序的实例,并为会话管理设置一个密钥。

  3. 定义管理员的默认用户名和密码。

  4. 定义登录路由('/'),处理GET和POST请求。

  • 如果请求方法是POST,它会获取包含用户名和密码的JSON数据。

  • 然后它会检查提供的用户名和密码是否与默认用户名和密码匹配。

  • 如果凭据有效,它会将用户名存储在会话中。

这个应用程序还包括其他几个路由:

  • `/welcome` 路由用于显示欢迎页面,只处理GET请求。它会检查用户是否已登录,如果已登录,则显示欢迎页面,否则重定向到登录页面。

  • `/home` 路由用于显示主页,只处理GET请求。它会检查用户是否已登录,如果已登录,则显示主页,否则返回一个JSON响应表示无权限访问主页。

  • `/logout` 路由用于注销用户,它会清除会话数据并重定向到登录页面。

如果你运行这个应用程序,它将在本地启动一个Web服务器,并监听默认的端口(通常是5000)。你可以通过访问`http://localhost:5000`来访问登录页面。

项目结构

app.py

python 复制代码
import os
from flask import Flask, render_template, request, redirect, url_for, session, jsonify

app = Flask(__name__)
app.secret_key = os.urandom(24)

# 默认的管理员账号和密码
default_username = 'admin'
default_password = 'admin123'


# 路由:登录页面
@app.route('/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 获取 JSON 数据
        data = request.get_json()

        # 获取账号和密码
        username = data.get('username')
        password = data.get('password')

        # 验证账号和密码
        if username == default_username and password == default_password:
            # 将用户信息存储到 session 中
            session['username'] = username
            return jsonify({'message': '登录成功'})
        else:
            return jsonify({'message': '账号或密码错误'})

    return render_template('login.html')


# 路由:欢迎页面
@app.route('/welcome', methods=['GET'])
def welcome():
    # 检查用户是否已经登录
    if 'username' in session:
        return render_template('welcome.html', username=session['username'])
    else:
        return redirect(url_for('login'))


# 路由:主页
@app.route('/home', methods=['GET'])
def home():
    # 检查用户是否已经登录
    if 'username' in session:
        return render_template('home.html', username=session['username'])
    else:
        return jsonify({'message': '无权限访问主页'})


# 路由:注销
@app.route('/logout')
def logout():
    # 清除 session 数据
    session.pop('username', None)
    return redirect(url_for('login'))


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

templates / login.html

python 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form id="loginForm">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br>
        <button type="submit">Login</button>
    </form>
    <div id="message"></div>

    <script>
        document.getElementById("loginForm").addEventListener("submit", function(event) {
            event.preventDefault();
            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            var data = {
                "username": username,
                "password": password
            };
            fetch("/", {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify(data)
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById("message").innerText = data.message;
                if (data.message === "登录成功") {
                    window.location.href = "/welcome";
                }
            })
            .catch(error => {
                console.error("Error:", error);
            });
        });
    </script>
</body>
</html>

templates / welcome.html

python 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome, {{ username }}!</h1>
    <p>You have successfully logged in.</p>
    <a href="/home">Go to Home</a>
    <br>
    <a href="/logout">Logout</a>
</body>
</html>

templates / home.html

python 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>Welcome, {{ username }}!</h1>
    <p>This is the home page.</p>
    <a href="/logout">Logout</a>
</body>
</html>

testcase.py

python 复制代码
import requests


session = requests.Session()

def login():
    data = {
        "username": "admin",
        "password": "admin123"
    }

    url = 'http://127.0.0.1:5000'

    res = session.request(url=url, method='post', json=data)
    return session


def Welcome():
    url ='http://127.0.0.1:5000/welcome'
    res = login().get(url=url)
    print(res.text)


def index_login():
    url = 'http://127.0.0.1:5000/home'
    res = login().request(url=url, method='get')
    print(res.text)


def index_notlogin():
    url = 'http://127.0.0.1:5000/home'
    res = requests.get(url=url)
    print(res.json())
相关推荐
2401_8543910810 分钟前
Spring Boot大学生就业招聘系统的开发与部署
java·spring boot·后端
Envyᥫᩣ11 分钟前
Python中的自然语言处理:从基础到高级
python·自然语言处理·easyui
哪 吒11 分钟前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
我是陈泽14 分钟前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
hakesashou15 分钟前
python全栈开发是什么?
python
虽千万人 吾往矣31 分钟前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
创作小达人34 分钟前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
ZPC821044 分钟前
Python使用matplotlib绘制图形大全(曲线图、条形图、饼图等)
开发语言·python·matplotlib
镜花照无眠1 小时前
Python爬虫使用实例-mdrama
开发语言·爬虫·python
aaasssdddd961 小时前
python和c
c语言·开发语言·python